编程语言
首页 > 编程语言> > c# – 除了使用P / Invoke之外,我如何在hBitmap上调用DeleteObject()?

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