c# – 除了使用P / Invoke之外,我如何在hBitmap上调用DeleteObject()?
作者:互联网
我正在处理类似这样的代码(从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之外,确实没有其他方法可以为我的hBitmap调用DeleteObject()吗?
解决方法:
我不认为除了使用p / invoke之外,还有任何方法可以从C#调用DeleteObject.
因此,如果您想避免这种不受欢迎的非托管代码,那么您应该首先避免调用GetHbitmap.你可以很容易地做到这一点.你想制作一个BitmapSource.通过调用BitmapSource.Create来做到这一点.
标签:c,net,bitmap,pinvoke,hbitmap 来源: https://codeday.me/bug/20190624/1275724.html