C#海康工业相机读取图片到pictureBox后,图片已经在pictureBox显示出来了,为什么pictureBox.image为null呢?

weixin_37788537 2022-01-24 13:23:12

C#工业相机读取图片到pictureBox后,图片明明已经显示出来了,为什么pictureBox.image为null,无法访问,请问各位大神,如何才能直接访问pictureBox.image图片,与pictureBox1相关的代码只有stDisplayInfo.hWnd = pictureBox1.Handle;这一句。

...全文
2213 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
悠然的二货 2022-01-29
  • 打赏
  • 举报
回复

这个是用GDI绘制上去的,Image属性是不会有变化的,要拿图片的话要仔细看下SDK文档,里面会有接口能取到图的

sdfsvbvcbcb 2022-01-24
  • 打赏
  • 举报
回复

原理大概和度申工业相机的是一样的原理, 你可以参考下我之前写的.

        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;
        }
sdfsvbvcbcb 2022-01-24
  • 打赏
  • 举报
回复

是不是提供了一个句柄给SDK绘制到了picturebox上面了, 并不是直接赋值到 image 属性, 如果是这样肯定有提供一个内存地址, 你直接copy内存地址里面的数据, 写入到 bitmap 类里面就好了

weixin_37788537 2022-01-25
  • 举报
回复
@sdfsvbvcbcb 您能不能帮助再详细讲解一下操作流程,这个问题困扰我好久了,万分感谢。
sdfsvbvcbcb 2022-01-25
  • 举报
回复
@weixin_37788537 看上面例子自己研究下海康SDK
MichaelGLX 2022-01-24
  • 打赏
  • 举报
回复

海康工业相机 SDK 提供了一个 保存图片, 稍微改造下,转为 Bitmap 格式,就行了

weixin_37788537 2022-01-24
  • 举报
回复
@MichaelGLX 感谢,我不想保存到本地,能否不保存,直接访问图片呢?
MichaelGLX 2022-01-24
  • 举报
回复
@weixin_37788537 建议佩戴眼镜,bmp.Save ,你不保存不行吗?直接 return bmp 不就可以了? 这个bmp 不就是你要的图像?

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧