CDCにSetPixelで描画し、それをbmpとして保存したいのですが、
どのように行うのでしょうか?
HBITAMPをビットマップに保存する処理がネットにあったので、それを
使えればと思っているのですが、DCとHBITMAPの関連付けの方法がよく分かりませ
ん・・・。
CDC* pDC;
pDC = this->GetDC();
CDC m_MemDC_A;
HBITMAP
CBitmap m_bitmap_A;
m_MemDC_A.CreateCompatibleDC(pDC);
m_bitmap_A.CreateCompatibleBitmap(&m_MemDC_A, 10, 10);
すいません、まだ途中だったのに間違えて投稿してしまいました。
CDCにSetPixelで描画し、それをbmpとして保存したいのですが、
どのように行うのでしょうか?
HBITAMPをビットマップに保存する処理がネットにあったので、それを
使えればと思っているのですが、DCとHBITMAPの関連付けの方法がよく分かりませ
ん・・・。(「Attach」を使うのかな?と思ったのですが・・・)
CDC* pDC;
pDC = this->GetDC();
CDC m_MemDC_A;
HBITMAP m_hBmp_A;
CBitmap m_bitmap_A;
m_MemDC_A.CreateCompatibleDC(pDC);
m_bitmap_A.CreateCompatibleBitmap(&m_MemDC_A, 10, 10);
m_bitmap_A.Attach(m_hBmp_A);//←例外が発生して落ちてしまう。
ちなみに超初心者です。
環境はWindowsXP、VS2005++、MFCです。
>環境はWindowsXP、VS2005++、MFCです。
この環境の場合、描画も保存もCImageクラスを使った方が楽です。
CImageはメモリDCを内部に持つビットマップ操作クラスで、
GetDC/ReleaseDC間にビットマップに直接絵を描くことができ、
画面への描画はBitBlt、ファイルへの保存はSaveメソッドを呼ぶだけです。
(目的がSetPixelだけならCImage::SetPixelでOK)
CImageを使わずに自分でビットマップを作る場合はCreateDibSectionを使用してください。
(CBitmapはDDBで保存には向いていません)
DCとHBITMAPの関連付けはSelectObjectを使います。
御本人が何を目的にしているかで変わってくるかな。
今やろうとしている事をきっかけにしてHDCやHBITMAP等々
GDIの処理に関して勉強しようと考えているなら
多少面倒でもCreateDibSectionを使ってやってみる処理を
勉強すると良いと思います。
CImageクラスを使うと楽に実装できますけれど、
実際にDCとBitmapを使ってどんな手順で操作するのか
と言う部分は分からないままになりますし、
これをきっかけにbitmapの構造について勉強してみるのも
悪く無いと思います。
こういった細かい部分の知識は直接やりたい事を実現して
くれるような関数がない場合に役に立ちます。
関数がないから処理その物をあきらめてしまうというのも
あると思いますが、それではちょっと悔しいですよね。
1.CImageを使う
2.DIBセクションをBITMAPFILEHEADERからシコシコ保管する
以外だとGDI+でもできますね。
ただ、こっちは参考にできる資料がいまいちかも。
みなさま、ご回答ありがとうございます。
CImageすごく便利ですね!
少し勉強してから取り組むことにいたします。
ありがとうございました!