C ++ GDI + завантаження зображень збільшує запит пам'яті

Я маю спосіб завантажити зображення:

RESULT CChildView::OnLoadPng( WPARAM wparam, LPARAM lParam )
{
    CGdiPlusBitmapResource* pBitmap = new CGdiPlusBitmapResource;
    if (pBitmap->Load(wparam, _T("PNG")))
    {
        CClientDC dc(this);
        Gdiplus::Graphics graphics(dc);
        Gdiplus::Color white(255, 255, 255, 255);
        graphics.Clear(white);
        graphics.DrawImage(*pBitmap, 0, 0);
    }
    else
    {
        AfxMessageBox("Failure loading image");
    }
    delete pBitmap;

    return 0L;
}

Проблема полягає в тому, що я закликаю цей метод багато разів, і кожного разу пам'ять зростає все більше і більше. Зображення перекриваються одним останнім, і я цього не хочу. Я спробував графіку.Flush() до graphics.DrawImage, але це не працює.

Єдине, що працювало, було руйнування вікна, але тоді я не зміг завантажити зображення знову.

Чи знаєте ви будь-який спосіб змити/очистити, що було з draw.DrawImage для завантаження іншого зображення?

0
graphics.Flush (); після graphics.Clear (білий); не працює?
додано Автор karlphillip, джерело
Ваша заявка, здається, не має витоків. Принаймні ця частина вихідного коду, яким ви надаєте доступ. Може бути, проблема в деякому іншому коді, який ви не показуєте нам.
додано Автор karlphillip, джерело
Як ви знаєте, чи ваша програма споживає більше пам'яті? Як ви протестували це? Наскільки я можу сказати з того, що ви описали, полотно вікна не очищено, але це все. Це не обов'язково означає, що ваша програма витікає з пам'яті.
додано Автор karlphillip, джерело
Я це знаю. І я хочу знати, як це очистити. graphics.flush() не працює. Ти знаєш як?
додано Автор Alberto, джерело
Це не працює. Збільшення пам'яті все більше і більше. Я збираюся спробувати завантажити образ і працювати з bmp замість png ...
додано Автор Alberto, джерело
Проблема полягає в тому, що всі зображення завантажуються без стирання попередніх. Там немає витоку, але зображення не стираються, і тому вони зберігаються в пам'яті, і програма використовує все більше і більше пам'яті. Одне з рішень - відправити WM_CLOSE в вікно, але потім мені потрібно створити інший, і це проблема в моєму додатку. Але я думаю, що це єдине рішення: створити нове вікно кожного разу, коли я завантажую зображення, і знищую попереднє.
додано Автор Alberto, джерело

Відповідей немає

0
IT KPI C/С++ новым годом
IT KPI C/С++ новым годом
747 учасників

Чат обсуждения С/С++. - Вопросы "напишите за меня лабу" - это оффтоп. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/1147