设为首页收藏本站 距【华南国际工业博览会】延期开幕 : :

Halcon视觉之家 - 51Halcon专注于机器视觉技术

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 61|回复: 3

[软件需求] Fast method to convert HObjecrt to Bitmap

[复制链接]

该用户从未签到

3

主题

33

帖子

42

积分

Rank: 1

积分
42

切换助手验证会员

发表于 2021-6-10 19:21:07 | 显示全部楼层 |阅读模式

51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

您需要 登录 才可以下载或查看,没有帐号?会员注册

x
Hi, colleagues!
Can anyone help to understand: is any simple and very fast method to convert Image as HObject to Bitmap???

Image size 3000x3000 converting for 1500 ms - it is bad!!!!!

I am using this code:

        public static Bitmap HObject2ColoredBitmap(this HObject myHObject)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();

            HTuple pointerRed = null;
            HTuple pointerGreen = null;
            HTuple pointerBlue = null;
            HTuple type;
            HTuple width;
            HTuple height;
            HOperatorSet.GetImagePointer3(myHObject, out pointerRed, out pointerGreen, out pointerBlue, out type, out width, out height);

            if (width.Type == HTupleType.EMPTY || height.Type == HTupleType.EMPTY)
            {
                return null;
            }

            Bitmap bitmap = new Bitmap((Int32)width, (Int32)height, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
            BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width / 4, bitmap.Height / 4), ImageLockMode.ReadWrite, bitmap.PixelFormat);
            IntPtr source_scan = bmpData.Scan0;

            unsafe
            {
                byte* source_p = (byte*)source_scan.ToPointer();
                byte* Red = (byte*)pointerRed.IP.ToPointer();
                byte* Blue = (byte*)pointerBlue.IP.ToPointer();
                byte* Green = (byte*)pointerGreen.IP.ToPointer();

                for (int h = 0; h < bitmap.Height; h++)
                {
                    for (int w = 0; w < bitmap.Width; w++)
                    {
                        source_p[0] = Blue[0];  //A
                        source_p++;
                        Blue++;
                        source_p[0] = Green[0];  //R
                        source_p++;
                        Green++;
                        source_p[0] = Red[0];  //G
                        source_p++;
                        Red++;
                        source_p++;
                    }
                }

            }

            bitmap.UnlockBits(bmpData);

            sw.Stop();
            Console.WriteLine($"Преобразование HObject в Bitmap: {sw.ElapsedMilliseconds}");
            sw = null;
            GC.Collect();
            return bitmap;
        }

1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    无聊
    前天 16:54
  • 签到天数: 56 天

    连续签到: 2 天

    [LV.5]常住居民I

    1

    主题

    44

    帖子

    147

    积分

    Rank: 1

    积分
    147

    切换助手验证会员

    发表于 2021-6-10 20:29:59 | 显示全部楼层
    1. private static void HObject2ColoredBitmap(HObject image, out Bitmap res)
    2.         {
    3.             try
    4.             {
    5.                 HTuple hred, hgreen, hblue, type, width, height;

    6.                 HOperatorSet.GetImagePointer3(image, out hred, out hgreen, out hblue, out type, out width, out height);

    7.                 res = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppRgb);

    8.                 Rectangle rect = new Rectangle(0, 0, width, height);
    9.                 BitmapData bitmapData = res.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format32bppRgb);
    10.                 int imglength = width * height;
    11.                 unsafe
    12.                 {
    13.                     byte* bptr = (byte*)bitmapData.Scan0;
    14.                     byte* r = ((byte*)hred.I);      //((byte*)hred.L);
    15.                     byte* g = ((byte*)hgreen.I);    // ((byte*)hgreen.L);
    16.                     byte* b = ((byte*)hblue.I);     //((byte*)hblue.L);
    17.                     for (int i = 0; i < imglength; i++)
    18.                     {
    19.                         bptr[i * 4] = (b)[i];
    20.                         bptr[i * 4 + 1] = (g)[i];
    21.                         bptr[i * 4 + 2] = (r)[i];
    22.                         bptr[i * 4 + 3] = 255;
    23.                     }
    24.                 }

    25.                 res.UnlockBits(bitmapData);
    26.             }
    27.             catch (Exception ex)
    28.             {
    29.                 res = null;
    30.                 throw ex;
    31.             }
    32.         }
    复制代码

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    该用户从未签到

    3

    主题

    33

    帖子

    42

    积分

    Rank: 1

    积分
    42

    切换助手验证会员

     楼主| 发表于 3 天前 | 显示全部楼层
    Thank you for answer!

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    该用户从未签到

    3

    主题

    33

    帖子

    42

    积分

    Rank: 1

    积分
    42

    切换助手验证会员

     楼主| 发表于 3 天前 | 显示全部楼层
    Unfourtanely this code is not working.

    Checked.

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    您需要登录后才可以回帖 登录 | 会员注册

    本版积分规则

    视觉培训招生

    建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站

    51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用

    算子查询| 申请友链| 小黑屋| 手机版| Archiver|

    © 2015-2021 51Halcon机器视觉  X3.4  粤ICP备15095995号-2 粤公网安备44030602000670号

    快速回复 返回顶部 返回列表