C#下怎么从指针指向的byte数组转换成bitmap类型
如题,用的Basler家的GiE相机,使用官方提供的库文件,抓取图像后返回图像数组指针到主窗口下,希望显示在PictureBox控件,请指教~具体点的话,数组长度和图像分辨率是已知的,8位灰度图像,数组为一维Byte类型的数组,按行存储,一个Byte就是一个像素点;这里实现了再改用12位量化来提高测量的精度。C#下返回一个IntPtr类型的指针 private Image byteArrayToImage(byte[] Bytes)
{
using (MemoryStream ms = new MemoryStream(Bytes))
{
Image outputImg = Image.FromStream(ms);
return outputImg;
}
}
C#下可以直接操作内存。用Marshal.Copy复制内存数据,然后用Bitmap.LockBits获取Bitmap缓冲首地址,然后再将处理后的RGB数据复制给Bitmap。切记C#内存地址是不固定的,不得直接将一个地址传给其它程序。要想传,首先用fixed原语声明内存地址,然后才能传指针。 wye11083 发表于 2015-1-11 16:11
C#下可以直接操作内存。用Marshal.Copy复制内存数据,然后用Bitmap.LockBits获取Bitmap缓冲首地址,然后再 ...
basler的官方库封装过,不知道给出指针的时候是否已经声明过,不过既然库能直接给出指针,那我认为应该是可以直接使用的;
我来试试你说的方法,2楼的程序我也搜到了,但是怎么改都有错误 huangdog 发表于 2015-1-11 16:21
basler的官方库封装过,不知道给出指针的时候是否已经声明过,不过既然库能直接给出指针,那我认为应该是可 ...
2L的方法只能读写文件流——你给一块raw它肯定不能工作的。C++的指针在C#里用肯定没问题,但是C#的指针在C++里用,必须用fixed修饰,否则会出错。
你还是先拷出来,处理好,再拷进去吧。这是C#唯一快捷的方法。SetPixel太慢了。
页:
[1]