111,119
社区成员
发帖
与我相关
我的任务
分享C#工业相机读取图片到pictureBox后,图片明明已经显示出来了,为什么pictureBox.image为null,无法访问,请问各位大神,如何才能直接访问pictureBox.image图片,与pictureBox1相关的代码只有stDisplayInfo.hWnd = pictureBox1.Handle;这一句。
这个是用GDI绘制上去的,Image属性是不会有变化的,要拿图片的话要仔细看下SDK文档,里面会有接口能取到图的
原理大概和度申工业相机的是一样的原理, 你可以参考下我之前写的.
static bool CopyMenImage(ref dvpFrame frame,IntPtr buff,out Bitmap dst)
{
try {
PixelFormat pixeFormat = PixelFormat.Format24bppRgb;
switch (frame.format) {
case dvpImageFormat.FORMAT_BGR24:
pixeFormat = PixelFormat.Format24bppRgb;
break;
case dvpImageFormat.FORMAT_BGR32:
pixeFormat = PixelFormat.Format32bppRgb;
break;
case dvpImageFormat.FORMAT_BGR48:
pixeFormat = PixelFormat.Format48bppRgb;
break;
default:
throw new Exception("该方法未实现 " + frame.format + " 目标图像格式的转换, 请设置工业相机目标图像格式为 BGR24/BGR32/BGR48 格式!");
}
byte[] bBuff = new byte[frame.uBytes];
dst = new Bitmap(frame.iWidth,frame.iHeight,pixeFormat);
BitmapData bmpData = dst.LockBits(new Rectangle(0, 0, dst.Width, dst.Height), ImageLockMode.ReadWrite, pixeFormat);
Marshal.Copy(buff, bBuff, 0, bBuff.Length);
Marshal.Copy(bBuff,0,bmpData.Scan0,bBuff.Length);
dst.UnlockBits(bmpData);
} catch (Exception) {
dst = null;
return false;
}
return true;
}
是不是提供了一个句柄给SDK绘制到了picturebox上面了, 并不是直接赋值到 image 属性, 如果是这样肯定有提供一个内存地址, 你直接copy内存地址里面的数据, 写入到 bitmap 类里面就好了
海康工业相机 SDK 提供了一个 保存图片, 稍微改造下,转为 Bitmap 格式,就行了