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

标签 c# wpf image bitmap

我在以 wpf-Image 形式显示图像 (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;

有谁知道为什么我只看到黑色图像(摄像头工作正常!)? 在此先感谢您的帮助


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

我在我的应用程序中使用的是 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 属性 maybe or.. 有什么问题吗?

谢谢

最佳答案

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

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

你可以传入 uEye.Defines.DeviceParameter.Wait 来阻塞线程,直到图像被完全捕获,或者如果你使用 DontWait(我个人更喜欢这个),订阅相机 OnFrameReceived 事件,然后将图像复制到那里有摄像头。

关于c# - WPF 位图到图像的转换仅显示黑色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23269876/

相关文章:

c# - 在 WPF 窗口加载时加载 XML 文件

jquery - 尝试在远程 JavaScript 加载后隐藏图像

python - 更改 matplotlib 按钮小部件的图像

iOS 'colorWithPatternImage' 在我的图片周围添加了 1 px 的边框?

c# - 需要对复杂的物体进行排序,例如多米诺骨牌

c# - 使用多个定界符拆分文件名

c# - Action 中的通用类型?

c# - 带参数的 XAML 中的自定义 UserControl(按钮)

c# - 使用 XSL-FO 在 .NET 中生成 PDF

WPF 事件,声明式还是处理程序?