sha*_*oth 5 .net c# pinvoke bitmap hbitmap
我正在处理类似这样的代码(从这里开始)
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());
}
Run Code Online (Sandbox Code Playgroud)
和MSDN说,每当我打电话Bitmap.GetHbitmap()我要叫DeleteObject()上hBitmap释放非托管资源。
我看到的所有答案和 MSDN 都说我必须 P/InvokeDeleteObject()函数。这看起来有点疯狂,因为我获得了hBitmap没有 P/Invoke 的,现在我突然需要使用 P/Invoke 来正确摆脱它。
除了 P/Invoke 之外确实没有其他方法可以DeleteObject()调用 myhBitmap吗?
我认为DeleteObject除了使用 p/invoke 之外,没有任何其他方法可以从 C# 调用。
因此,如果您想避免这种非托管代码的意外访问,那么您应该首先避免调用GetHbitmap。你可以很容易地做到这一点。你想制作一个BitmapSource. 调用BitmapSource.Create.