gpt4 book ai didi

c# - 除了使用 P/Invoke 之外,如何在 hBitmap 上调用 DeleteObject()?

转载 作者:太空狗 更新时间:2023-10-30 01:18:14 27 4
gpt4 key购买 nike

我正在处理类似这样的代码(来自 here)

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/Invoke DeleteObject() 函数。这看起来有点疯狂,因为我在没有 P/Invoke 的情况下获得了 hBitmap,现在我突然需要使用 P/Invoke 来正确地摆脱它。

除了 P/Invoke 是否真的没有其他方法让 DeleteObject() 调用我的 hBitmap

最佳答案

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

因此,如果您想避免这种意外的非托管代码之旅,那么您应该首先避免调用 GetHbitmap。你可以很容易地做到这一点。你想制作一个 BitmapSource。通过调用 BitmapSource.Create 来做到这一点。

关于c# - 除了使用 P/Invoke 之外,如何在 hBitmap 上调用 DeleteObject()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28217995/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com