3

Kinect を使用して顔認識を行うために、Winforms で Emgu Cv を使用しています。今、私はWPFに移行したいと思います。ただし、EmguCv ライブラリはBitmapクラスのみをサポートしています。

WPF で Bitmap クラス (Winforms で使用) を使用できますか? そうでない場合、WPF の kinect で Emgu cv を使用する他の方法はありますか?

ありがとう。

4

1 に答える 1

10

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使用してプロパティを設定することで表示できます。ImageSource

WPF イメージングの詳細については、次の記事を参照してください:イメージングの概要

于 2012-09-11T12:46:13.760 に答える