C#从三通道图像数据流转到HObject
来源:互联网 发布:sqlserver教材 编辑:程序博客网 时间:2024/06/07 10:52
用相机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);//用完了一定要解除锁定
//显示OK,跟PictureBox显示的图片一模一样,哦耶!
HOperatorSet.DispObj(halcon_image, this.hWindowControl1.HalconWindow);
HOperatorSet.WriteImage(halcon_image, "bmp", 0, "Halcon_Image.bmp");//这个bmp文件很大
//占用内存很多,建议手动清理一下
二、可用GenImageInterleaved函数,具体方法见实例,这里暂时不举例;
- C#从三通道图像数据流转到HObject
- 单通道图像与三通道图像的memcpy()
- 【OpenCV】四通道图像复制到三通道图像上
- 三通道图像转化为三通道,并将多通道图像混合
- opencv 三通道图像的分通道显示
- 关于图像三通道和单通道的解释
- 三通道bgr图像直方图均衡化
- python opencv 提取彩色图像三通道
- C#获取内存图像数据流的方法
- 从网络下载图片数据流 C#
- 图像通道
- 图像通道
- 图像通道
- 图像通道
- 图像通道
- C# 右键转到定义 后出现文件名.cs [从元数据] 无法转到定义 而转到元数据 -》解决方法
- Halcon学习之三:有关图像通道的函数
- Opencv函数--split(获取彩色图像三通道)
- 类与对象
- 微信小程序image组件binderror使用例子(对应html、js中的onerror) ,图片失效显示默认图片
- ubuntu 安装openjdk8
- 机器人TF库
- 变态的程序园网站
- C#从三通道图像数据流转到HObject
- MS word 2010大小写转换方法
- Android JNI 把Java数组传递给C
- jquery中获取一批包含同样字符id值方法
- 4.空格替换
- eclipse插件egit安装使用
- MySQL表结构优化、数据类型选择方法
- 采用jacob实现word转pdf
- sdut 2603 向量的旋转变换与旋转角的关系(山东第4届省赛)