WPF CreateBitmapSourceFromHBitmap () утечка памяти

Я полагаю, что "ipp" стоит из файла "реализации". т.е., они содержат на самом деле код (для подставляемых функций & шаблоны), а не просто объявление (которые находятся в заголовке-.H или.HPP - файлы)

46
задан sharptooth 29 January 2015 в 14:59
поделиться

1 ответ

MSDN для Bitmap.GetHbitmap () утверждает:

Замечания

Вы несете ответственность за вызов метода GDI DeleteObject для освобождения памяти, используемой объектом растрового изображения GDI.

Поэтому используйте следующий код:

// at class level
[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)) 
{
    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);
    }
}

Я также заменил ваш вызов Dispose () на ] с помощью оператора .

77
ответ дан 26 November 2019 в 20:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: