Halcon之C#将三通道图像数据流转到HObject

使用相机SDK采图的话很多时候得到的是一个数据流(byte[])或者指针IntPtr,单通道图像格式转换采用gen_image1来实现,三通道图像可以采用gen_image3函数来实现。

//命名空间 
using System; 
using System.Drawing; 
using System.IO; 
using System.Threading; 
using System.Windows.Forms; 
using HalconDotNet; 
using System.Drawing.Imaging; 
………………………………………………………………………………………………………………………… 
//这里的Image.Buffer是byte[],由于里面还包含了相机型号等其它信息,不能直接拿来操作 
MemoryStream buffer = new MemoryStream(Image.Buffer); 
Bitmap bmp = new Bitmap(buffer);//用BitMap做中转 
this.pictureBox1.Image = bmp; 
 
HOperatorSet.SetPart(this.hWindowControl1.HalconWindow, 0, 0, bmp.Height, bmp.Width); 
HObject halcon_image; 

BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, bmp.PixelFormat);//锁定BitMap 

byte[] arrayR = new byte[bmp_data.Width * bmp_data.Height];//红色数组 
byte[] arrayG = new byte[bmp_data.Width * bmp_data.Height];//绿色数组 
byte[] arrayB = new byte[bmp_data.Width * bmp_data.Height];//蓝色数组 

byte* pBmp = (byte*)bmp_data.Scan0;//BitMap的头指针 
//下面的循环分别提取出红绿蓝三色放入三个数组 
for (int R = 0; R < bmp_data.Height; R++) 

     for (int C = 0; C < bmp_data.Width; C++) 
      { 
            //因为内存BitMap的储存方式,行宽用Stride算,C*3是因为这是三通道,另外BitMap是按BGR储存的 
            byte* pBase = pBmp + bmp_data.Stride * R + C * 3; 
            arrayR[R * bmp_data.Width + C] = *(pBase + 2); 
            arrayG[R * bmp_data.Width + C] = *(pBase + 1); 
            arrayB[R * bmp_data.Width + C] = *(pBase); 
       } 


//得到三个数组的头指针,C#特色 
fixed (byte* pR = arrayR, pG = arrayG, pB = arrayB) 

      HOperatorSet.GenImage3(out halcon_image, "byte", bmp_data.Width, bmp_data.Height, 
                                                 new IntPtr(pR), new IntPtr(pG), new IntPtr(pB)); 
                                                 //如果这里报错,仔细看看前面有没有写错 


bmp.UnlockBits(bmp_data);//用完了一定要解除锁定 

HOperatorSet.DispObj(halcon_image, this.hWindowControl1.HalconWindow); 
HOperatorSet.WriteImage(halcon_image, "bmp", 0, "Halcon_Image.bmp");//这个bmp文件很大 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章