从 HBitmap 创建 WPF BitmapSource 时出现内存泄漏
使用 CreateBitmapSourceFromHBitmap() 在 WPF 中创建逐像素图像可能会导致内存泄漏如果处理不当。当重复调用此方法而不释放 BitmapSource 内存时,内存利用率持续增加。
根本原因
问题源于 Bitmap.GetHbitmap( ) 检索 GDI 位图对象的句柄。 MSDN明确指出必须使用GDI的DeleteObject方法释放该句柄,以释放关联的内存资源。
解决方案
要修复内存泄漏,释放内存至关重要从 Bitmap.GetHbitmap() 获取的句柄。应进行以下修改:
示例代码
以下代码演示了如何使用这种方法:
// Import DeleteObject from gdi32.dll [System.Runtime.InteropServices.DllImport("gdi32.dll")] public static extern bool DeleteObject(IntPtr hObject); // Your Code using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(1000, 1000)) { // Obtain HBitmap handle IntPtr hBitmap = bmp.GetHbitmap(); try { // Create BitmapSource using HBitmap (using statement handles GDI bitmap disposal) var source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()); } finally { // Release HBitmap handle DeleteObject(hBitmap); } }
通过实现这些更改,您可以有效防止内存泄漏并正确释放与从 HBitmap 创建的 BitmapSource 关联的资源。
以上是从 HBitmap 创建 WPF BitmapSource 时如何防止内存泄漏?的详细内容。更多信息请关注PHP中文网其他相关文章!