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)
我有什么想法我做错了吗?
问题解决了.要转换图像:
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)