HBITMAP に保存されているスクリーンショットを使用して、これを PNG 画像として出力しようとしています。
ただし、メモリが正しく解放されていないように見えるため、コードにはメモリ リークがあるようです。
void saveAsPNG(HBITMAP h)
{
CImage image;
if(_access(location, 0) == 0)
{
unlink(location); //Delete the image if currently exists
}
image.Attach(h);
image.Save(location,Gdiplus::ImageFormatPNG);
h = image.Detach();
image.Destroy();
image.ReleaseGDIPlus();
}
このコードは機能しますが、メモリのクリアは行われないようです。タスク マネージャーのプライベート メモリ セット列によると、image.Destroy はメモリにまったく影響を与えませんが、image.ReleaseGDIPlus は一部のデータをクリーンアップしているように見えます。HBITMAP は前の関数から取得され、この関数とは別のコードの後半で GlobalFreed になります。
行がありませんか?