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

51Halcon机器视觉

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 630|回复: 2

[资料] C# bitmap 与 HObject 互转,包括彩图和灰度图

[复制链接]

该用户从未签到

1

主题

2

帖子

14

积分

Rank: 1

积分
14
发表于 2020-10-28 09:36:08 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 王耀辉 于 2020-10-28 10:07 编辑
    • 本文代码部分来此其他网站的copy,但是我在使用过程中,发现存在以下两个问题:

          1.hobject 灰度图转bitmap 灰度图方法,在X64平台上报错。
          2. 原版代码HObject2Bpp32 这个方法,我在方法内用 Graphics 类把Format32bppArgb 重画为Format24bppRgb,
              但是在连续调用用此方法时,会报内存错误。
    • 上述两个问题,我在网上搜索了很久,都找不到解决方案。
    • 之后我仔细研究研究转换原理,最后在原有代码基础上改造成功。

    文中只贴出了bitmap 转Hobject代码(包括灰度图和彩图),附档中包含Hobject 转bitmap(包括灰度图和彩图),此部分有本人自创内容,完整代码请下载附档查看。






using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using HalconDotNet;
using System.IO;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;   // 必须要有
using System.Diagnostics;

public class bmp_halcon
    {
        [DllImport("kernel32.dll")]
        public static extern void CopyMemory(int Destination, int add, int Length);
       //彩色图转换
        public void Bitmap2HObjectBpp24(Bitmap bmp, out HObject image)
        {
            try
            {
                Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);

                BitmapData srcBmpData = bmp.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
                HOperatorSet.GenImageInterleaved(out image, srcBmpData.Scan0, "bgr", bmp.Width, bmp.Height, 0, "byte", 0, 0, 0, 0, -1, 0);
                bmp.UnlockBits(srcBmpData);

            }
            catch (Exception ex)
            {
                image = null;
            }
        }
        //灰度图转换
        public void Bitmap2HObjectBpp8(Bitmap bmp, out HObject image)
        {
            try
            {
                Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);

                BitmapData srcBmpData = bmp.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format8bppIndexed);

                HOperatorSet.GenImage1(out image, "byte", bmp.Width, bmp.Height, srcBmpData.Scan0);
                bmp.UnlockBits(srcBmpData);
            }
            catch (Exception ex)
            {
                image = null;
            }
        }
        // 32位平台可用,附档内有可用于64位平台可用的方法
        public void HObject2Bpp8(HObject image, out Bitmap res)
        {
            HTuple hpoint, type, width, height;

            const int Alpha = 255;
            int[] ptr = new int[2];
     
           //.....................................

        }
   // old way
     public void HObject2Bpp32(HObject image, out Bitmap res)
        {
            HTuple hred, hgreen, hblue, type, width, height;

           //.........................................................

        }
    // halcon 17 之后的版本可用,速度比上个方法(HObject2Bpp32 )快很多
    public void HObject2Bpp24(HObject ho_image, out Bitmap res24)
        {


            HTuple width0, height0, type, width, height;
            //获取图像尺寸
            HOperatorSet.GetImageSize(ho_image, out width0, out height0);

           //..........................................................
        }

        }


bitmapt2hobject.pdf

175.52 KB, 下载次数: 1, 下载积分: 金币 -2

售价: 10 视觉币  [记录]  [购买]

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

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

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

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

该用户从未签到

0

主题

1

帖子

9

积分

Rank: 1

积分
9
发表于 2020-10-28 13:48:44 | 显示全部楼层
请问你这个确定可以用吗?

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

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

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

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

该用户从未签到

1

主题

2

帖子

14

积分

Rank: 1

积分
14
 楼主| 发表于 2020-10-28 18:51:20 | 显示全部楼层
Ken1024 发表于 2020-10-28 13:48
请问你这个确定可以用吗?

亲测可以

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

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

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

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

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

本版积分规则

视觉培训招生

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

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

申请友链| 小黑屋| 手机版| Archiver|  

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

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