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);
    }
}