ビットマップをメモリ上でコピーするには?

[戻る]
LEON [E-Mail] 2002/04/22(月) 14:25:46
お久しぶりです。LEONです。

現在、ビットマップを読み込んでいろいろ編集するソフトを作成しています。
ビットマップの読み込みはできたのですが、ビットマップをメモリ上でコピーする方法が
分かりません。
CBitmapオブジェクトやBITMAPINFOHEADER構造体の変数は作ったもののデバイスをどう扱うか
など、分からないことだらけです。
ちなみに読み込んだビットマップを、BitBlt()を利用して編集できるようにしたいのですが、
BitBltもいまいち理解不足ですので、関連して教えていただけたら有り難いです。

どなたか詳しい方教えてください。
よろしくお願いします。

kokin 2002/04/22(月) 17:09:45
ピクセルデータを読み込んでるならば私は次のように処理します。
MFCは良くわからないので、SDKで書いてしまいます。すいません。

HWND hWnd;//描画させたいウィンドウのハンドル


HDC hDC = GetDC(hWnd);//描画先のデバイスコンテキスト
HDC memDC = CreateCompatibleDC(hDC);//メモリデバイスコンテキスト。
HBITMAP hbmp = CreateCompatibleBitmap(hDC,希望の幅,同高さ);
HBITMAP old = (HBITMAP)SelectObject(memDC,hbmp);

SetDIBits(引数たくさんあるので省略);

BitBlt(同省略);

SelectObject(memDC,old);//選択したら元のオブジェクトに必ず戻します。
ReleaseDC(hDC,hWnd);//これも必ず開放します。
DeleteDC(hbmp);//必要なくなったオブジェクトは削除します。

以上ですがBitBltの何がわからないのでしょうか?
デバイスコンテキストの概念(?)ですか?
世間ではよくデバイスの画材と、画用紙だといわれてます。
上の例ではhbmpが画用紙で色のデータをもったピクセルデータが
画材にあたるかと思います。
お役に立つことを祈ってます.

LEON [E-Mail] 2002/04/23(火) 16:51:12
すみません。勉強不足なもので・・・もう一つ教えていただけないでしょうか?
BitBlt後のビットマップの画像情報が欲しいのですがどのようにすれば取得できるでしょう
か?
具体的にはBitBlt後にビットマップのバイトデータを取得したいのですが・・・。

よろしくお願いします。

kokin 2002/04/23(火) 17:55:27
こんちは。描画は上手く出来ましたか?
適当に書いたんで自信なかったのですが・・・

>BitBlt後のビットマップの画像情報が欲しいのですがどのようにすれば取得できるでしょう
>か?

? BitBltで転送したなら描画先も描画もとも同じ画像同じピクセルデータのような気がします
が。


+------------------+
|                  |       +----+
|     A            |       | B  |
|                  |       +----+
|                  |
|                  |
|                  |
+------------------+

BをAにBitBltしてほしいのは転送後のAのピクセルデータ、みたいなことでしょうか?
もしそうならAを選択したメモリデバイスコンテキストがあるはずですから
それをmemDC_Aとしたらそれを使ってGetDIBitsでピクセルデータが取り出せる
と思います。

全く関係なかったらすいません。

古いスレッドには追加発言できません。