搜索
bottom↓
回复: 4

C#下怎么从指针指向的byte数组转换成bitmap类型

[复制链接]

出0入8汤圆

发表于 2015-1-11 15:16:03 | 显示全部楼层 |阅读模式
如题,用的Basler家的GiE相机,使用官方提供的库文件,抓取图像后返回图像数组指针到主窗口下,希望显示在PictureBox控件,请指教~

具体点的话,数组长度和图像分辨率是已知的,8位灰度图像,数组为一维Byte类型的数组,按行存储,一个Byte就是一个像素点;这里实现了再改用12位量化来提高测量的精度。C#下返回一个IntPtr类型的指针

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2015-1-11 15:50:16 | 显示全部楼层
        private Image byteArrayToImage(byte[] Bytes)
        {
            using (MemoryStream ms = new MemoryStream(Bytes))
            {
                Image outputImg = Image.FromStream(ms);
                return outputImg;
            }
        }

出0入442汤圆

发表于 2015-1-11 16:11:32 | 显示全部楼层
C#下可以直接操作内存。用Marshal.Copy复制内存数据,然后用Bitmap.LockBits获取Bitmap缓冲首地址,然后再将处理后的RGB数据复制给Bitmap。切记C#内存地址是不固定的,不得直接将一个地址传给其它程序。要想传,首先用fixed原语声明内存地址,然后才能传指针。

出0入8汤圆

 楼主| 发表于 2015-1-11 16:21:41 | 显示全部楼层
wye11083 发表于 2015-1-11 16:11
C#下可以直接操作内存。用Marshal.Copy复制内存数据,然后用Bitmap.LockBits获取Bitmap缓冲首地址,然后再 ...

basler的官方库封装过,不知道给出指针的时候是否已经声明过,不过既然库能直接给出指针,那我认为应该是可以直接使用的;

我来试试你说的方法,2楼的程序我也搜到了,但是怎么改都有错误

出0入442汤圆

发表于 2015-1-11 16:28:22 | 显示全部楼层
huangdog 发表于 2015-1-11 16:21
basler的官方库封装过,不知道给出指针的时候是否已经声明过,不过既然库能直接给出指针,那我认为应该是可 ...

2L的方法只能读写文件流——你给一块raw它肯定不能工作的。C++的指针在C#里用肯定没问题,但是C#的指针在C++里用,必须用fixed修饰,否则会出错。
你还是先拷出来,处理好,再拷进去吧。这是C#唯一快捷的方法。SetPixel太慢了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-22 19:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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