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

問題は何度もこのメソッドを呼び出し、メモリがますます増えることです。画像は最後に重ねて表示されますが、私はそれを望んでいません。私はgraphics.DrawImageの前にgraphics.Flush()を試みましたが、それはうまくいきません。

うまくいったのはウィンドウを破壊することだけでしたが、イメージをもう一度読み込めませんでした。

他の画像を読み込むためにgraphics.DrawImageで描画されたものをフラッシュ/クリアする方法は知っていますか?

0
graphics.Clear(white); の後で graphics.Flush(); が機能していませんか?
追加された 著者 karlphillip,
アプリケーションにリークがないようです。あなたが共有しているソースコードの少なくともこの部分。たぶん問題は、あなたが私たちに見せていない他のコードです。
追加された 著者 karlphillip,
あなたのアプリケーションがより多くのメモリを消費しているかどうかをどのように知っていますか?どのようにこれをテストしましたか?あなたが説明したことから分かる限り、窓のキャンバスはクリアされていませんが、それだけです。必ずしもアプリケーションがメモリをリークしているとは限りません。
追加された 著者 karlphillip,
そんなこと知ってる。そして私はそれをクリアする方法を知りたい。 graphics.Flush()は機能しません。どのようにするか知っていますか?
追加された 著者 Alberto,
それはうまくいきません。メモリはますます増えています。私はloadimageを試して、pngの代わりにbmpで作業するつもりです...
追加された 著者 Alberto,
問題は、プレビオの画像を消去することなくすべての画像がロードされることです。漏れはありませんが、画像は消去されないので、メモリに保存され、プログラムはますます多くのメモリを使用します。 1つの解決策は、ウィンドウにWM_CLOSEを送信することですが、私は別のものを作成する必要があり、それは私のアプリでは問題です。しかし、私はこれが唯一の解決策だと考えています:画像をロードするたびに新しいウィンドウを作成し、前のウィンドウを破棄します。
追加された 著者 Alberto,

答えはありません

0