私はSystem.Drawing.Imageのインスタンスを持っています。Drawing.Image in WPF
これを私のWPFアプリケーションでどのように表示できますか?
私はimg.Source
で試しましたが、うまくいきません。
私はSystem.Drawing.Imageのインスタンスを持っています。Drawing.Image in WPF
これを私のWPFアプリケーションでどのように表示できますか?
私はimg.Source
で試しましたが、うまくいきません。
イメージをWPFイメージコントロールに読み込むには、System.Windows.Media.ImageSourceが必要です。
あなたのDrawing.ImageオブジェクトがImageSourceはオブジェクトに変換する必要があります。DeleteObjectの方法の
public static BitmapSource GetImageStream(Image myImage)
{
var bitmap = new Bitmap(myImage);
IntPtr bmpPt = bitmap.GetHbitmap();
BitmapSource bitmapSource =
System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
bmpPt,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
//freeze bitmapSource and clear memory to avoid memory leaks
bitmapSource.Freeze();
DeleteObject(bmpPt);
return bitmapSource;
}
宣言。
[DllImport("gdi32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool DeleteObject(IntPtr value);
私はこのソリューションが好きです!ありがとう、男! –
私は同じ問題を抱え、いくつかの答えを組み合わせて解決します。 this question and answers
から
System.Drawing.Bitmap bmp;
Image image;
...
using (var ms = new MemoryStream())
{
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
ms.Position = 0;
var bi = new BitmapImage();
bi.BeginInit();
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.StreamSource = ms;
bi.EndInit();
}
image.Source = bi;
//bmp.Dispose(); //if bmp is not used further. Thanks @Peter
あなたがコンバータを使用する場合は、あなたが実際にImage
オブジェクトにバインドすることができます。 を作成すると、Image
がBitmapSource
に変換されます。
実際の作業を行うために、コンバータの内部にAlexDreneaのサンプルコードを使用しました。
[ValueConversion(typeof(Image), typeof(BitmapSource))]
public class ImageToBitmapSourceConverter : IValueConverter
{
[DllImport("gdi32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool DeleteObject(IntPtr value);
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Image myImage = (Image)value;
var bitmap = new Bitmap(myImage);
IntPtr bmpPt = bitmap.GetHbitmap();
BitmapSource bitmapSource =
System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
bmpPt,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
//freeze bitmapSource and clear memory to avoid memory leaks
bitmapSource.Freeze();
DeleteObject(bmpPt);
return bitmapSource;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
あなたのXAMLにコンバータを追加する必要があります。
<utils:ImageToBitmapSourceConverter x:Key="ImageConverter"/>
<Image Source="{Binding ThumbSmall, Converter={StaticResource ImageConverter}}"
Stretch="None"/>
自己完結型。私はそれが好きです – Basic
おそらく関連:[WPFのhttp://stackoverflow.com/questions/1118496/using-image-control-in-wpf-to-display-system-drawing-bitmap – Alain
可能性の重複 - 私が使用できますSystem.Drawing in wpf?](http://stackoverflow.com/questions/10663056/wpf-can-i-use-system-drawing-in-wpf) –