首頁 >後端開發 >C++ >WPF:使用 CreateBitmapSourceFromHBitmap() 時如何防止記憶體洩漏?

WPF:使用 CreateBitmapSourceFromHBitmap() 時如何防止記憶體洩漏?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-10 10:26:40244瀏覽

WPF: How to Prevent Memory Leaks When Using CreateBitmapSourceFromHBitmap()?

WPF:CreateBitmapSourceFromHBitmap() 中的記憶體洩漏

在 WPF 應用程式中,重複使用 CreateBitmapSourceFromHBitmap() 可能會導致記憶體洩漏。此問題發生的原因是 CreateBitmapSourceFromHBitmap() 使用的基礎 GDI 位圖未正確釋放。

為了解決此記憶體洩漏問題,必須使用 gdi32.dll 庫中的 DeleteObject() 方法手動釋放 GDI 位圖。可以透過將 Bitmap 物件包裝在 using() 語句中來實現此目的,該語句會自動呼叫 Dispose() 方法來釋放 GDI 位元圖。以下是更新後的程式碼:

<code class="language-csharp">using System.Runtime.InteropServices;

...

using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(1000, 1000))
{
    IntPtr hBitmap = bmp.GetHbitmap();

    try
    {
        var source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
    }
    finally
    {
        DeleteObject(hBitmap);
    }
}</code>

透過使用 using 語句並明確呼叫 DeleteObject(),可以釋放 GDI 位元圖並防止記憶體洩漏。這確保了即使重複呼叫也能正確釋放記憶體。

以上是WPF:使用 CreateBitmapSourceFromHBitmap() 時如何防止記憶體洩漏?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn