3
我正在與Winforms中的Emgu Cv一起使用Kinect進行人臉識別。現在,我想轉移到WPF。但是,EmguCv庫僅支持位圖類。WPF中的位圖類
我可以在WPF中使用Bitmap類(用於Winforms)嗎?如果沒有,是否有其他方法在WPF中使用Emgu cv和kinect?
謝謝。
我正在與Winforms中的Emgu Cv一起使用Kinect進行人臉識別。現在,我想轉移到WPF。但是,EmguCv庫僅支持位圖類。WPF中的位圖類
我可以在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句柄(見this答案)。
一旦您有BitmapSource
,您可以使用Image
控件和設置Source
屬性來顯示它。
您可以在這篇文章中瞭解更多關於WPF成像:Imaging Overview
你好,我應該添加到System.Drawing中的參考? –
@RafikHaceb是的,確保你的項目有一個對'System.Drawing.dll'和'PresentationCore.dll'的引用。順便說一下,如果您發現有幫助的答案,您可以將其標記爲「已接受」。請參閱[如何接受答案?](http://meta.stackexchange.com/a/5235/164263)。 –