5

私はこのようなコードを扱っています(ここから)

using (var bmp = new System.Drawing.Bitmap(1000, 1000)) 
{
    IntPtr hBitmap = bmp.GetHbitmap(); 
    var source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
        hBitmap, IntPtr.Zero, Int32Rect.Empty,
        System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
}

また、MSDN によると、電話をかけるたびに、管理されていないリソースを解放するためにBitmap.GetHbitmap()を呼び出す必要があります。DeleteObject()hBitmap

私が見たすべての答えとMSDNは、DeleteObject()関数をP/Invokeする必要があると言います。hBitmapP/Invoke を使用せずに を取得したため、これを適切に取り除くために P/Invoke を突然使用する必要があるため、これは少し正気ではないように見えます。

P/Invoke 以外DeleteObject()に myを呼び出す方法はありませんhBitmapか?

4

1 に答える 1

5

DeleteObjectp/invoke を使用する以外に C#から呼び出す方法はないと思います。

そのため、この望ましくないアンマネージ コードへのトリップを回避したい場合GetHbitmapは、最初から呼び出しを避ける必要があります。あなたはそれを十分に簡単に行うことができます。を作りたいですBitmapSource。への呼び出しでそれを行いますBitmapSource.Create

于 2015-01-30T15:04:26.357 に答える