Kinect を使用して顔認識を行うために、Winforms で Emgu Cv を使用しています。今、私はWPFに移行したいと思います。ただし、EmguCv ライブラリはBitmapクラスのみをサポートしています。
WPF で Bitmap クラス (Winforms で使用) を使用できますか? そうでない場合、WPF の kinect で Emgu cv を使用する他の方法はありますか?
ありがとう。
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);
}
}
は GDI ハンドルをリークするDeleteObject
ため、を呼び出す必要があることに注意してください(この回答を参照)。Bitmap.GetHbitmap()
を取得したら、コントロールをBitmapSource
使用してプロパティを設定することで表示できます。Image
Source
WPF イメージングの詳細については、次の記事を参照してください:イメージングの概要