Schon oft gesehen in Beispielen zu Image Interop ist folgender Code:

 

BitmapSource bitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(source.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

Das funktioniert soweit auch hat aber einen entscheidenden Fehler, auf den man schnell kommt, wenn man sich die MSDN Dokumentation anschaut.

Der Handle der von GetHBitmap zurückgeliefert wird, muss nämlich manuell wieder freigegeben werden. Und zwar mit der DeleteObject Methode:

[System.Runtime.InteropServices.DllImport(“gdi32.dll”)]
public static extern bool DeleteObject(IntPtr hObject);