如何在hBitmap上调用DeleteObject(),而不是通过使用P / Invoke



我正在处理这样的代码(从这里开始)

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()时,我都必须在hBitmap上呼叫DeleteObject()以释放非托管资源。

看到的所有答案和MSDN都说我必须P/调用DeleteObject()函数。这看起来有点疯狂,因为我在没有 P/Invoke 的情况下获得了hBitmap,现在我突然需要使用 P/Invoke 来正确摆脱它。

除了 P/Invoke 之外,真的没有其他方法可以要求DeleteObject() hBitmap吗?

我认为除了使用 p/invoke 之外,没有任何方法可以从 C# 调用DeleteObject

因此,如果要避免这种意外的非托管代码之旅,则应首先避免调用GetHbitmap。你可以很容易地做到这一点。你想做一个BitmapSource.通过打电话给BitmapSource.Create来做到这一点。

相关内容

  • 没有找到相关文章

最新更新