EMGU与C#WPF

Gra*_*avy 1 c# wpf opencv image emgucv

我正在尝试按照以下教程但使用WPF而不是Win Forms:

基础课程

WPF不使用PictureBox,而是使用Image.

所以这里试图加载一个Image.

XAML

<Image x:Name="srcImg" Width="400" Height="300"></Image>
Run Code Online (Sandbox Code Playgroud)

CS尝试1:

Image<Bgr, Byte> My_Image = new Image<Bgr, byte>(Openfile.FileName);
srcImg.Source = My_Image.ToBitmap();
Run Code Online (Sandbox Code Playgroud)

错误信息

Cannot implicitly convert type 'System.Drawing.Bitmap' 
to 'System.Windows.Media.ImageSource'
Run Code Online (Sandbox Code Playgroud)

CS尝试2:

Image<Bgr, Byte> My_Image = new Image<Bgr, byte>(Openfile.FileName);
srcImg.Source = new BitmapImage(My_Image);
Run Code Online (Sandbox Code Playgroud)

错误信息

Error   1   The best overloaded method match for 'System.Windows.Media.Imaging.BitmapImage.BitmapImage(System.Uri)' has some invalid arguments  
Error   2   Argument 1: cannot convert from 'Emgu.CV.Image<Emgu.CV.Structure.Bgr,byte>' to 'System.Uri' 
Run Code Online (Sandbox Code Playgroud)

我有什么想法我做错了吗?

Gra*_*avy 8

问题解决了.要转换图像:

Image<Bgr, Byte> My_Image = new Image<Bgr, byte>(Openfile.FileName);
srcImg.Source = BitmapSourceConvert.ToBitmapSource(myImage);
Run Code Online (Sandbox Code Playgroud)

BitmapSourceConvert类:

public static class BitmapSourceConvert
{
    [DllImport("gdi32")]
    private static extern int DeleteObject(IntPtr o);

    public static BitmapSource ToBitmapSource(IImage image)
    {
        using (System.Drawing.Bitmap source = image.Bitmap)
        {
            IntPtr ptr = source.GetHbitmap();

            BitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                ptr,
                IntPtr.Zero,
                Int32Rect.Empty,
                System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

            DeleteObject(ptr);
            return bs;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)