WPF位图到图像的转换仅显示黑色图像

本文关键字:图像 显示 黑色 转换 位图 WPF | 更新日期: 2023-09-27 17:59:45

我在以wpf图像形式显示图像(uEye Cam)时确实遇到了一些问题图像是完全黑色的。以下是我使用的代码:

//Get Cam Bitmap Image
var cam = new uEye.Camera();
cam.Init();
cam.Memory.Allocate();
cam.Acquisition.Capture(uEye.Defines.DeviceParameter.DontWait);
Int32 s32MemId;
cam.Memory.GetActive(out s32MemId);
cam.Memory.Lock(s32MemId);
Bitmap bitmap;
cam.Memory.ToBitmap(s32MemId, out bitmap);
//WPF Image control
System.Windows.Controls.Image img = new System.Windows.Controls.Image();
//convert System.Drawing.Image to WPF image
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(bitmap);
IntPtr hBitmap = bmp.GetHbitmap();
System.Windows.Media.ImageSource WpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
image1.Source = WpfBitmap;
image1.Stretch = System.Windows.Media.Stretch.UniformToFill;
image1.Visibility = Visibility.Visible;

有人知道为什么我只看到一个黑色的图像吗(摄像头在工作!)?提前感谢的帮助


编辑(作为对答案/评论的反应):

我在应用程序中使用的是WPF而不是WinForms。

你是对的,"img"没有被使用,因此不正确。我相应地更改了代码并实现了DeleteObject。我的代码现在看起来是这样的:

//WPF Image control
var image1 = new System.Windows.Controls.Image();
//convert System.Drawing.Image to WPF image
var bmp = new System.Drawing.Bitmap(bitmap);
IntPtr hBitmap = bmp.GetHbitmap();
System.Windows.Media.ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
image1.Source = wpfBitmap;
image1.Stretch = System.Windows.Media.Stretch.UniformToFill;
image1.Visibility = Visibility.Visible;
DeleteObject(hBitmap);

与以前不同的是,我看到的是白色图像,而不是黑色图像。我不知道为什么它没有给我回凸轮图像。image1属性可能有什么问题吗。。?

感谢

WPF位图到图像的转换仅显示黑色图像

我知道这是一段很长的时间,但你的问题可能是因为在你的捕获方法中(请参阅下面的行),你正在传递DontWait,这意味着线程不会等待相机捕获图像,但你会立即从相机内存中访问图像。在您复制图像时,相机不太可能已获取图像。

cam.Acquisition.Capture(uEye.Defines.DeviceParameter.DontWait);

您可以传入uEye.Defines.DeviceParameter.Wait来阻止线程,直到图像被完全捕获,或者如果您使用DontWait(我个人更喜欢这样),则订阅相机OnFrameReceived事件,然后将图像从相机中复制出来。