我正在使用 Winforms 中的 Emgu Cv 使用 Kinect 进行人脸识别。现在,我想转移到 WPF。但是,EmguCv 库仅支持Bitmap类。
我可以在 WPF 中使用 Bitmap 类(在 Winforms 中使用)吗?如果没有,是否有其他方法可以在 WPF 中使用 Emgu cv 和 kinect?
谢谢。
System.Drawing.Bitmap
不能直接用作 WPF 的图像源,所以必须将其转换为System.Windows.Media.Imaging.BitmapSource
.
最好的方法是使用Imaging.CreateBitmapSourceFromHBitmap
.
您可以使用扩展方法:
[DllImport("gdi32")]
private static extern int DeleteObject(IntPtr o);
public static BitmapSource ToBitmapSource(this System.Drawing.Bitmap source)
{
if (source == null)
{
throw new ArgumentNullException("source");
}
IntPtr ip = source.GetHbitmap();
try
{
return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(ip,
IntPtr.Zero, Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
}
finally
{
DeleteObject(ip);
}
}
请注意,您必须调用DeleteObject
,因为会Bitmap.GetHbitmap()
泄漏 GDI 句柄(请参阅此答案)。
拥有BitmapSource
后,您可以使用Image
控件并通过设置Source
属性来显示它。
您可以在本文中阅读有关 WPF 成像的更多信息:成像概述