设为首页收藏本站 距【华南国际工业博览会】宝安新馆开幕 : :

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

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 298|回复: 7

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

[复制链接]
  • TA的每日心情
    奋斗
    2021-9-13 04:56
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    6

    主题

    53

    帖子

    73

    积分

    Rank: 1

    积分
    73

    切换助手验证会员

    发表于 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;
            }

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

    连续签到: 2 天

    [LV.5]常住居民I

    1

    主题

    45

    帖子

    148

    积分

    Rank: 1

    积分
    148

    切换助手验证会员

    发表于 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.         }
    复制代码
  • TA的每日心情
    奋斗
    2021-9-13 04:56
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    6

    主题

    53

    帖子

    73

    积分

    Rank: 1

    积分
    73

    切换助手验证会员

     楼主| 发表于 2021-6-15 19:59:25 | 显示全部楼层
    Thank you for answer!
  • TA的每日心情
    奋斗
    2021-9-13 04:56
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    6

    主题

    53

    帖子

    73

    积分

    Rank: 1

    积分
    73

    切换助手验证会员

     楼主| 发表于 2021-6-15 20:01:44 | 显示全部楼层
    Unfourtanely this code is not working.

    Checked.
  • TA的每日心情
    开心
    昨天 09:23
  • 签到天数: 1235 天

    连续签到: 23 天

    [LV.10]以坛为家III

    415

    主题

    1708

    帖子

    6024

    积分

    Rank: 9

    积分
    6024

    突出贡献优秀版主荣誉管理论坛元老切换助手验证会员最佳新人

    发表于 2021-6-19 20:09:11 | 显示全部楼层
    Evgeniy 发表于 2021-6-15 20:01
    Unfourtanely this code is not working.

    Checked.

    it's helpfull for you:https://www.51halcon.com/forum.p ... &tid=4778&fromuid=3
    无效附件更新 权限提升操作 删帖申请 举报以及其他需要帮助请加入QQ群:214663141 广告位招商 有意者联系
  • TA的每日心情
    奋斗
    2021-9-13 04:56
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    6

    主题

    53

    帖子

    73

    积分

    Rank: 1

    积分
    73

    切换助手验证会员

     楼主| 发表于 2021-6-29 18:11:09 | 显示全部楼层
    Hi, Criss )

    Thank you for your help.

    Is only one problem: I can't download attached project file from Baidu vault.
    Is any possibility to download this example with another way?
  • TA的每日心情
    奋斗
    2021-9-13 04:56
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    6

    主题

    53

    帖子

    73

    积分

    Rank: 1

    积分
    73

    切换助手验证会员

     楼主| 发表于 2021-6-29 18:14:59 | 显示全部楼层
    Hi, Criss )))

    https://1drv.ms/u/s!AgtcKzAtnq7fi0Ae4NwpPOrCQPM9?e=FezI1m
    Thank you very much!!!

    I will send you feedback when I will understand this example )
  • TA的每日心情
    开心
    昨天 09:23
  • 签到天数: 1235 天

    连续签到: 23 天

    [LV.10]以坛为家III

    415

    主题

    1708

    帖子

    6024

    积分

    Rank: 9

    积分
    6024

    突出贡献优秀版主荣誉管理论坛元老切换助手验证会员最佳新人

    发表于 2021-7-2 16:24:52 | 显示全部楼层
    Evgeniy 发表于 2021-6-29 18:14
    Hi, Criss )))

    https://1drv.ms/u/s!AgtcKzAtnq7fi0Ae4NwpPOrCQPM9?e=FezI1m

    you're welcome!
    无效附件更新 权限提升操作 删帖申请 举报以及其他需要帮助请加入QQ群:214663141 广告位招商 有意者联系
    您需要登录后才可以回帖 登录 | 会员注册

    本版积分规则

    视觉培训招生

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

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

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

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

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