开启左侧

大恒相机的图像buffer如何转为Himage?

[复制链接]
北方利刃 发表于 2017-11-27 14:36:00 | 显示全部楼层 |阅读模式
   C#代码如下:            
IntPtr pBufferMono = objIImageData.GetBuffer();//获取图像数据buffer,返回IntPtr类型指针,直接指向非托管内存。

                Marshal.Copy(pBufferMono, m_byMonoBuffer, 0, m_nWidth * m_nHeigh); //m_byMonoBuffer是获取图像数据的buffer
                unsafe
                {


                    fixed (byte* pter = &m_byMonoBuffer[0])
                    {


                        Image.GenImage1("byte", m_nWidth, m_nHeigh, new IntPtr(pter));
                    }

                }
Image.GenImage1("byte", m_nWidth, m_nHeigh, new IntPtr(pter));这段报“未将对象引用设置到对象的实例”错误

想问一下HImage.GenImage1怎么用?
大恒相机的图像buffer如何转为Himage?
Criss 发表于 2017-11-28 08:37:17 | 显示全部楼层
Himage对象估计没有new,可以试试new HImage呢,然后再调用函数。
moto5315 发表于 2017-11-29 14:52:40 | 显示全部楼层
Hi,

最近剛好有用到,但我得到的影像資訊為二維陣列,供你參考
若有任何錯誤請麻煩糾正,謝謝

unsafe
      {
          //h 為影像高度、w為影像寬度
          //byte[,] byteData 為 [h][w] 二維矩陣

          //一維矩陣容器
          byte[] singleArrayData = new byte[h * w];

          //轉換為一維陣列
          singleArrayData = arrayData.Cast<byte>().ToArray();

          fixed (byte* pData = singleArrayData)
          {
            himage.GenImage1("byte", w, h, new IntPtr(pData));
          }
        }
zazaniao 发表于 2017-11-30 00:16:49 | 显示全部楼层
我不懂为什么这么多人喜欢用HImage,我没用过。我把相机buffer转成halcon图像对象是这样处理的:
HOperatorSet.GenEmptyObj(out ImageTemp);
                ImageTemp.Dispose();
                //把图像数据生成halcon图像
                //pData:图像数据地址;
                if (!m_Cam.m_bIsColor)
                {
                    //如果是黑白相机,
                    HOperatorSet.GenImage1(out ImageTemp, "byte", m_Cam.m_nImageWidth, m_Cam.m_nImageHeight, (HTuple)pData);
                }
                else
               
               //如果相机是彩色,需要把pixel format 改成RGB8Packed并保存
                {
                    HOperatorSet.GenImageInterleaved(out ImageTemp, (HTuple)pData, "rgb", m_Cam.m_nImageWidth,m_Cam.m_nImageHeight, 0, "byte",0, 0, 0, 0, 8, 0);
   
                }
a3231459 发表于 2018-1-11 09:59:38 | 显示全部楼层
Himage 和Hobject是可以相互转换的。你可以用genImage1从IntPtr得到Hobject,转为Himage
gong8c8d 发表于 2018-3-24 08:34:54 | 显示全部楼层
学习一下,
pwb964012840 发表于 2018-4-8 18:07:08 | 显示全部楼层
public void OnFrameCallbackFun(object obj, IFrameData objIFrameData)

        {
            //用户私有参数obj,用户在注册回调函数的时候传入了设备对象,在回调函数内部可以将此参数还原为用户私有参数

            IGXDevice objIGXDevice = obj as IGXDevice;

            if (objIFrameData.GetStatus() == 0)

            {
                //图像获取为完整帧,可以读取图像宽、高、数据格式等

                UInt64 nWidth = objIFrameData.GetWidth();

                UInt64 nHeight = objIFrameData.GetHeight();

                GX_PIXEL_FORMAT_ENTRY emPixelFormat = objIFrameData.GetPixelFormat();

                imagebuffer = objIFrameData.GetBuffer();

                //HOperatorSet.GenImage1(out camImage, "byte", nWidth, nHeight, imagebuffer);
                HOperatorSet.GenImage1Extern(out camImage, "byte", nWidth, nHeight, imagebuffer, 0);
                // DispImage(camImage);
                Disp?.Invoke(camImage);
                //其他图像信息的获取参见IFrameData接口定义
            }
        }
峰子 发表于 2018-5-10 15:20:38 | 显示全部楼层
pwb964012840 发表于 2018-4-8 18:07
public void OnFrameCallbackFun(object obj, IFrameData objIFrameData)

        {

我用你发的这个,有点问题,“HOperatorSet.GenImage1Extern(out CamImage, "byte", nWidth, nHeight, imagebuffer, 0);”在这句话就会报错
夜行人 发表于 2018-6-25 12:02:55 | 显示全部楼层
51Halcon 发表于 2017-11-28 08:37
你好,你的HImag类型的变量是Halcon的吗?目前我没有见过HImage类型的,HObject类型我倒是知道! ...

halcon里面是有HImage类型的,它是继承HObject的,反编译下就出来的
1.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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