WindowsFormのBitmapと、WPFのBitmapSourceとを相互変換変換する
WindowsFormのSystem.Drawing.Bitmap と WPFのSystem.Windows.Media.Imaging.BitmapSource とを相互変換するコードサンプルです。
// WPFのBitmapSource ⇒ WindowsFormのBitmap
public static System.Drawing.Bitmap ConvertImagingToDrawing(System.Windows.Media.Imaging.BitmapSource src)
{
System.Drawing.Bitmap destBmp = null;
try
{
System.Windows.Media.Imaging.PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(src));
using (var s = new MemoryStream())
{
encoder.Save(s);
s.Seek(0, SeekOrigin.Begin);
using (var bmp = new System.Drawing.Bitmap(s))
{
// ストリームを閉じた後のSave メソッド呼び出し等でGDI+例外が発生しないように別のBitmapへコピー
destBmp = new System.Drawing.Bitmap(bmp);
}
}
}
catch { }
return destBmp;
}
// WindowsFormのBitmap ⇒ WPFのBitmapSource
public static System.Windows.Media.Imaging.BitmapSource ConvertDrawingToImaging(System.Drawing.Bitmap bmp)
{
var handle = bmp.GetHbitmap();
try
{
return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero,
System.Windows.Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
}
finally
{
DeleteObject(handle);
}
}