0

次のチュートリアルに従おうとしていますが、Win Forms の代わりに WPF を使用しています。

基本プログラム

WPF は を使用せずPictureBox、代わりに を使用しますImage

したがって、ここで をロードしようとしますImage

XAML

<Image x:Name="srcImg" Width="400" Height="300"></Image>

CS 試行 1:

Image<Bgr, Byte> My_Image = new Image<Bgr, byte>(Openfile.FileName);
srcImg.Source = My_Image.ToBitmap();

エラーメッセージ

Cannot implicitly convert type 'System.Drawing.Bitmap' 
to 'System.Windows.Media.ImageSource'

CS 試行 2:

Image<Bgr, Byte> My_Image = new Image<Bgr, byte>(Openfile.FileName);
srcImg.Source = new BitmapImage(My_Image);

エラーメッセージ

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' 

私が間違っていることはありますか?

4

5 に答える 5

8

問題が解決しました。画像を変換するには:

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

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;
        }
    }
}
于 2013-05-16T21:41:21.563 に答える
0

Emgu CV を WPF で使用する場合は、Emgu のピクチャ ボックスでユーザー コントロールを作成し (このコントロールは win フォームでのみ機能します)、それを WindowsFormsHost で使用することを検討する必要があります。

于 2013-05-16T20:49:26.227 に答える