我与Emgu简历的WinForms工作使用Kinect的做人脸识别。 现在,我想移动到WPF。 然而,EmguCv库只支持Bitmap类。
我可以使用WPF Bitmap类(在使用的WinForms)? 如果没有,是否有WPF中使用Emgu CV与Kinect的另一方法是什么?
谢谢。
我与Emgu简历的WinForms工作使用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成像: 图像处理概述