C ++ GDI + yuklash rasmlarni xotira so'rovini oshiradi

Tasvirni yuklash usuli:

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

Muammo men bu usulni bir necha marta chaqiraman va har safar xotira ko'payadi. Tasvirlar oxirgi marta bir-biriga ulanadi va men buni xohlamayman. Graphics.DrawImagedan oldin graphics.Flush() ni sinab ko'rdim, lekin u ishlamaydi.

Ishlayotgan birgina narsa derazani yo'q qilish edi, lekin keyin yana rasmni tiklay olmadim.

Boshqa tasvirni tiklash uchun graphics.DrawImage bilan chizilgan narsalarni tozalash/tozalash usullarini bilasizmi?

0
graphics.Flush (); keyin graphics.Clear (oq); ishlamayapti?
qo'shib qo'ydi muallif karlphillip, manba
Sizning arizangizda qochqin kabi ko'rinmaydi. Hech bo'lmasa manba kodining ushbu qismini almashasiz. Ehtimol, muammo siz ko'rsatmagan boshqa kodda.
qo'shib qo'ydi muallif karlphillip, manba
Sizning arizangiz ko'proq xotira iste'mol qiladimi-yo'qligini qanday bilasiz? Buni qanday sinab ko'rdingiz? Siz aytgan narsadan bilib olganimdek, deraza tuvali tozalanmagan, ammo barchasi shu. Bu sizning arizangiz xotiradan oqayotganini anglatmaydi.
qo'shib qo'ydi muallif karlphillip, manba
Men buni bilaman. Va buni qanday qilib tozalashni bilishni istayman. Grafik.Flush() ishlamaydi. Qanday qilib bilasizmi?
qo'shib qo'ydi muallif Alberto, manba
U ishlamaydi. Xotira ko'payib bormoqda. Loadimage ni sinash va bmp o'rniga bmp bilan ishlashni ...
qo'shib qo'ydi muallif Alberto, manba
Muammo oldindan tayyorlangan narsalarni yo'q qilmasdan barcha tasvirlar yuklanadi. Hech qanday oqish yo'q, lekin tasvirlar o'chirilmaydi, shuning uchun ular xotirada saqlanadi va dastur ko'proq xotiradan foydalanadi. Bitta echim - WM_CLOSE-ni derazaga jo'natishdir, ammo keyin yana bir yaratishim kerak va bu mening ilovamdagi muammo. Lekin, bu yagona yechim deb o'ylayman: har safar men rasmni ko'targanimda va avvalgi narsani yo'q qilsam, yangi oyna yaratish.
qo'shib qo'ydi muallif Alberto, manba

Javob yo'q

0