• 締切済み

メモリーリークの原因

お世話になっております。 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); 何が悪いのか、どうすればよいか教えていただけないでしょうか? よろしくお願いします。

みんなの回答

回答No.3

■訂正■ 失礼、BitBltのコピー方向が逆でした。 コードは無視してください。

cappcino
質問者

お礼

お世話になっております。 ご回答ありがとうございます。 今、確認していると SaveImageDC=CDC::FromHandle(SaveImage.GetDC()); の時に、ハンドルがうまく取れていないような気がします。 何かよい方法はないでしょうか? よろしくお願いします。

回答No.2

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)
回答No.1

SaveImage.Createしたら SaveImage.Destroyしないといけないのではと思いました

cappcino
質問者

お礼

お世話になっております。 ご回答ありがとうございます。 確認させていただきます。 今後ともよろしくお願いします。

専門家に質問してみよう