C ++ GDI + laden van afbeeldingen verhoogt het geheugenverzoek

Ik heb een methode om een ​​afbeelding te laden:

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;
}

Het probleem is dat ik deze methode vele malen noem, en elke keer dat het geheugen meer en meer toeneemt. De beelden overlappen elkaar de laatste en dat wil ik niet. Ik heb graphics geprobeerd.Flush() voor graphics.DrawImage, maar dat werkt niet.

Het enige dat werkte, was het venster vernietigen, maar toen kon ik een afbeelding niet meer laden.

Kent u een manier om te wissen/wissen wat met graphics is getekend.DrawImage om nog een afbeelding te laden?

0
graphics.Flush (); na graphics.Clear (wit); werkt niet?
toegevoegd de auteur karlphillip, de bron
Uw applicatie lijkt geen lek te hebben. Tenminste dit deel van de broncode die je deelt. Misschien zit het probleem in een andere code die je niet laat zien.
toegevoegd de auteur karlphillip, de bron
Hoe weet u of uw toepassing meer geheugen verbruikt? Hoe heb je dit getest? Voor zover ik kan zien aan de hand van wat je hebt beschreven, is het canvas van het venster niet gewist, maar dat is alles. Dit betekent niet noodzakelijk dat uw toepassing geheugen lekt.
toegevoegd de auteur karlphillip, de bron
Ik weet dat. En ik wil weten hoe ik het kan opruimen. graphics.Flush() werkt niet. Weet jij hoe?
toegevoegd de auteur Alberto, de bron
Het werkt niet. Het geheugen neemt steeds meer toe. Ik ga loadimage proberen en met bmp werken in plaats van png ...
toegevoegd de auteur Alberto, de bron
Het probleem is dat alle afbeeldingen worden geladen zonder de vorige te wissen. Er is geen lek, maar de afbeeldingen worden niet gewist en dus worden ze in het geheugen bewaard en gebruikt het programma steeds meer geheugen. Een oplossing is om een ​​WM_CLOSE naar het venster te sturen, maar dan moet ik er nog een maken en het is een probleem in mijn app. Maar ik denk dat dit de enige oplossing is: maak elke keer dat ik een afbeelding laad een nieuw venster en vernietig de vorige.
toegevoegd de auteur Alberto, de bron

Geen antwoorden

0