- 締切済み
メモリーリークの原因
お世話になっております。 VC2005を使用しております。 現在作成したいプログラムは、 (1)picture controlにて画像を編集する。(Pic1) (2)それをjpgファイルで保存する。 という事なのですが、下記プログラムにて、このルーチンを抜けた後に メモリーリークが発生してしまいます。saveの部分をコメントアウトすると発生しないため、ここが原因だと思いますが、どうして発生するかわかりません。 CImage SaveImage; RECT rect; CDC *pDC = m_Pic1.GetDC(); // ピクチャボックスのDC CDC *SaveImageDC; //保存用のDC m_Pic1.GetClientRect(&rect); SaveImage.Create(rect.right,rect.bottom,24,0); SaveImageDC=CDC::FromHandle(SaveImage.GetDC()); SaveImageDC->BitBlt(0,0,rect.right,rect.bottom,pDC,0,0,SRCCOPY); SaveImage.Save("PP.jpg"); ReleaseDC(pDC); ReleaseDC(SaveImageDC); 何が悪いのか、どうすればよいか教えていただけないでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- burroughs6
- ベストアンサー率76% (29/38)
■訂正■ 失礼、BitBltのコピー方向が逆でした。 コードは無視してください。
- burroughs6
- ベストアンサー率76% (29/38)
m_Pic1にどのように画像を表示しているのかわかりませんが、 画像が表示されているとしても、質問のコードではCImageに ビットマップはコピーされません。 CImage SaveImage; RECT rect; m_Pic1.GetClientRect(&rect); SaveImage.Create(rect.right,rect.bottom,24,0); SaveImage.BitBlt((HDC)m_Pic1.GetDC(),0,0,SRCCOPY); SaveImage.Save("PP.jpg");
- php504
- ベストアンサー率42% (926/2160)
SaveImage.Createしたら SaveImage.Destroyしないといけないのではと思いました
お礼
お世話になっております。 ご回答ありがとうございます。 確認させていただきます。 今後ともよろしくお願いします。
お礼
お世話になっております。 ご回答ありがとうございます。 今、確認していると SaveImageDC=CDC::FromHandle(SaveImage.GetDC()); の時に、ハンドルがうまく取れていないような気がします。 何かよい方法はないでしょうか? よろしくお願いします。