DCをビットマップ出力 – プログラミング – Home

通知
すべてクリア

[解決済] DCをビットマップ出力


かう
 かう
(@かう)
ゲスト
結合: 15年前
投稿: 3
Topic starter  

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);


引用未解決
トピックタグ
かう
 かう
(@かう)
ゲスト
結合: 15年前
投稿: 3
Topic starter  

すいません、まだ途中だったのに間違えて投稿してしまいました。

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です。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

>環境はWindowsXP、VS2005++、MFCです。
この環境の場合、描画も保存もCImageクラスを使った方が楽です。

CImageはメモリDCを内部に持つビットマップ操作クラスで、
GetDC/ReleaseDC間にビットマップに直接絵を描くことができ、
画面への描画はBitBlt、ファイルへの保存はSaveメソッドを呼ぶだけです。
(目的がSetPixelだけならCImage::SetPixelでOK)

CImageを使わずに自分でビットマップを作る場合はCreateDibSectionを使用してください。
(CBitmapはDDBで保存には向いていません)
DCとHBITMAPの関連付けはSelectObjectを使います。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

御本人が何を目的にしているかで変わってくるかな。

今やろうとしている事をきっかけにしてHDCやHBITMAP等々
GDIの処理に関して勉強しようと考えているなら
多少面倒でもCreateDibSectionを使ってやってみる処理を
勉強すると良いと思います。
CImageクラスを使うと楽に実装できますけれど、
実際にDCとBitmapを使ってどんな手順で操作するのか
と言う部分は分からないままになりますし、
これをきっかけにbitmapの構造について勉強してみるのも
悪く無いと思います。
こういった細かい部分の知識は直接やりたい事を実現して
くれるような関数がない場合に役に立ちます。
関数がないから処理その物をあきらめてしまうというのも
あると思いますが、それではちょっと悔しいですよね。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

1.CImageを使う
2.DIBセクションをBITMAPFILEHEADERからシコシコ保管する

以外だとGDI+でもできますね。
ただ、こっちは参考にできる資料がいまいちかも。


返信引用
かう
 かう
(@かう)
ゲスト
結合: 15年前
投稿: 3
Topic starter  

みなさま、ご回答ありがとうございます。

CImageすごく便利ですね!

少し勉強してから取り組むことにいたします。

ありがとうございました!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました