在WPF Bitmap类(Bitmap class in WPF)

2019-07-31 12:33发布

我与Emgu简历的WinForms工作使用Kinect的做人脸识别。 现在,我想移动到WPF。 然而,EmguCv库只支持Bitmap类。

我可以使用WPF Bitmap类(在使用的WinForms)? 如果没有,是否有WPF中使用Emgu CV与Kinect的另一方法是什么?

谢谢。

Answer 1:

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成像: 图像处理概述



文章来源: Bitmap class in WPF