首页 > 其他分享 >Halcon 与 bitmap 互转

Halcon 与 bitmap 互转

时间:2023-11-29 18:13:32浏览次数:44  
标签:image Halcon res32 width bmp Bitmap 互转 bitmap out

 

Halcon 与 bitmap 互转:

        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;
            }
        }
        public void HObject2Bpp24(HObject ho_image, out Bitmap res24)
        {
            HTuple width0, height0, type, width, height;
            //获取图像尺寸
            HOperatorSet.GetImageSize(ho_image, out width0, out height0);
            //创建交错格式图像
            HOperatorSet.InterleaveChannels(ho_image, out HObject InterImage, "argb", "match", 255);  //"rgb", 4 * width0, 0     "argb", "match", 255
            //获取交错格式图像指针
            HOperatorSet.GetImagePointer1(InterImage, out HTuple Pointer, out type, out width, out height);
            IntPtr ptr = Pointer;
            //构建新Bitmap图像
            Bitmap res32 = new Bitmap(width / 4, height, width, PixelFormat.Format32bppArgb, ptr);  // Format32bppArgb     Format24bppRgb
            //32位Bitmap转24位
            res24 = new Bitmap(res32.Width, res32.Height, PixelFormat.Format24bppRgb);
            Graphics graphics = Graphics.FromImage(res24);
            graphics.DrawImage(res32, new Rectangle(0, 0, res32.Width, res32.Height));
            res32.Dispose();
        }
        public void HObject2Bpp8_(HObject image, out Bitmap res)
        {
            HTuple hpoint, type, width, height;
            const int Alpha = 255;
            HOperatorSet.GetImagePointer1(image, out hpoint, out type, out width, out height);
            res = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
            ColorPalette pal = res.Palette;
            for (int i = 0; i <= 255; i++)
            {
                pal.Entries[i] = Color.FromArgb(Alpha, i, i, i);
            }
            res.Palette = pal;
            Rectangle rect = new Rectangle(0, 0, width, height);
            BitmapData bitmapData = res.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
            int PixelSize = Bitmap.GetPixelFormatSize(bitmapData.PixelFormat) / 8;
            IntPtr ptr1 = bitmapData.Scan0;
            IntPtr ptr2 = hpoint;
            int bytes = width * height;
            byte[] rgbvalues = new byte[bytes];
            System.Runtime.InteropServices.Marshal.Copy(ptr2, rgbvalues, 0, bytes);
            System.Runtime.InteropServices.Marshal.Copy(rgbvalues, 0, ptr1, bytes);
            res.UnlockBits(bitmapData);
        }

 

标签:image,Halcon,res32,width,bmp,Bitmap,互转,bitmap,out
From: https://www.cnblogs.com/forblueskies/p/17865518.html

相关文章

  • OpenCV Mat和Bitmap的转换
    最常用的方式是:Cv2.ImRead()可以将位图文件转成Mat数据格式Cv2.ImWrite()可以将Mat数据格式保存到位图文件.不通过读写文件作为转换介质的方法:privatevoidtestMatToPicture(){varmat=Cv2.ImRead("D:\\my_workspace\\opencv\\images\\lena.jpg",ImreadModes.Co......
  • C++ 字符串编码转换封装函数,UTF-8编码与本地编码互转
    简介字符串编码转换封装函数,UTF-8编码与本地编码互转。中文乱码的解决方法有时候我们会遇到乱码的字符串,比如:古文码可能是用GBK方式读取UTF-8编码的中文导致的,用下面的Utf8ToLocal(stringstr)函数转换一下就可以了。口字码可能是因为以UTF-8的方式读取GBK编码的中文导致的,用下面......
  • Cesium 中坐标相互转换
    Cesium中坐标相互转换经纬度degree<->弧度radianradians->degrees[static]Cesium.Math.toDegrees(radians)→numberconstcoordWGS84Lon=Cesium.Math.toDegrees(coordCartographic.longitude);constcoordWGS84Lat=Cesium.Math.toDegrees(coordCartographic.......
  • uniapp base64与file互转
    uniappbase64与file互转//base64转flie//base64转fliebase64ToFile(base64data,cb){ constfsm=uni.getFileSystemManager(); constFILE_BASE_NAME='tmp_base64src';//自定义文件名 const[,format,bodyData]=/data:image\/(\w+);base64,(.*)/.exec......
  • 无涯教程-Tk - Bitmap部件函数
    位图小部件用于将位图添加到画布。位图小部件的语法如下所示-canvasNamecreatebitmapxyoptionsx和y设置位图的位置-Bitmap-参数下表在下面列出了可用于位图小部件的选项-Sr.No.Syntax&Remark1-anchorposition位图将相对于x和y位置定位。中心默认为默认值,其他......
  • 写写Redis十大类型bitmap的常用命令
    其实这些命令官方上都有,而且可读性很强,还有汉化组翻译的http://redis.cn/commands.html,不过光是练习还是容易忘,写一写博客记录一下bitmap位图,是由0和1状态表现的二进制bit数组,bitmap是由string作为底层数据结构,本质就是一个数组应用场景:用户签到,视频是否播放,是否登录过,钉钉打卡......
  • 在.net中使用AutoMapper进行对象映射,对象相互转,简单方便
    AutoMapper是一种对象映射工具,它可以帮助我们将不同类型的数据对象之间进行相互转换。在.NET中,我们可以使用AutoMapper库来简化数据对象之间的映射操作,从而提高代码的可读性和可维护性。一、AutoMapper的安装和基本使用安装AutoMapper首先,我们需要在项目中安装AutoMapper库。......
  • Java时间截和日期格式相互转换的方法。
    1.将时间戳转换为日期格式: 2.将日期格式转换为时间戳: ......
  • java时间截和日期格式相互转换的方法
    1.日期格式图片展示2.时间戳图片展示 ......
  • java to json / json to java使用FastJson对JSON字符串、JSON对象及JavaBean之间的相
    目录1、准备 2、javato json 3、jsontojava1、准备 1、json格式在线查看2.下载 阿里巴巴json 解析库alibaba/fastjson下载最新的jar包并且放在项目libs目录下,addaslib````2、javato json 比如我们想使用java 编写以下json格式数据{   "creatT......