「これはヤバかったな」という遅刻エピソード

お世話になっております。
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);

何が悪いのか、どうすればよいか教えていただけないでしょうか?
よろしくお願いします。

A 回答 (3件)

■訂正■


失礼、BitBltのコピー方向が逆でした。
コードは無視してください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/03 18:47

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");
    • good
    • 0

SaveImage.Createしたら


SaveImage.Destroyしないといけないのではと思いました
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/03 18:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報