WPF中的位图类

WPF中的位图类,wpf,bitmap,kinect,emgucv,Wpf,Bitmap,Kinect,Emgucv,我正在Winforms中使用Emgu Cv使用Kinect进行人脸识别。现在,我想转到WPF。但是,EmguCv库仅支持位图类 我可以在WPF中使用位图类(在Winforms中使用)吗?如果没有,是否有其他方法在WPF中使用Emgu cv和kinect 谢谢。不能直接用作WPF的图像源,因此您必须将其转换为 最好的方法是使用 您可以使用扩展方法: [DllImport("gdi32")] private static extern int DeleteObject(IntPtr o); pub

我正在Winforms中使用Emgu Cv使用Kinect进行人脸识别。现在,我想转到WPF。但是,EmguCv库仅支持位图类

我可以在WPF中使用位图类(在Winforms中使用)吗?如果没有,是否有其他方法在WPF中使用Emgu cv和kinect

谢谢。

不能直接用作WPF的图像源,因此您必须将其转换为

最好的方法是使用

您可以使用扩展方法:

[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
,就可以使用控件并通过设置属性来显示它


您可以在本文中阅读有关WPF映像的更多信息:

您好,我是否应该添加对system.Drawing的引用?@RafikHaceb是的,请确保您的项目具有对
system.Drawing.dll
PresentationCore.dll
的引用。顺便说一句,如果你觉得答案有帮助,你可以把它标记为“接受”。看见