はじめまして。
現在、ウィンドウ上に表示した絵をBitMapデータをbitmapbuffに
取得するプログラムを作成していますが、行き詰まっております。
m_MainPictWnd=絵が描かれているウィンドウのハンドル
CBitmap *pBitmap;
char bitmapbuff[1000];
int retdata;
CDC *dc;
/* ウインドウのデバイスコンテキスト取得 */
dc = m_MainPictWnd->GetDC();
/* デバイスコンテキストのBitmapポインタを取得 */
pBitmap = dc->GetCurrentBitmap();
retdata = pBitmap->GetBitmapBits(1000, bitmapbuff);
上記の様に作成すると、retdataが0になり、
エラーが発生しているようです。
ご教授を御願い致します。
どっかにスクリーンキャプチャのサンプルありそうだけどな。
MFCではないなど多少違うけど参考にはなると思う。
http://www13.plala.or.jp/kymats/study/MULTIMEDIA/ScreenCapture.html
http://ziddy.japan.zdnet.com/qa4384061.html
http://questionbox.jp.msn.com/qa2936804.html
などなど
以下うろ覚えなので間違えているかもしれない。
ウィンドウDC取得
ウィンドウサイズ等に合ったビットマップ作成
ウィンドウサイズ等に合ったbitmapbuffバッファのメモリ確保
ウィンドウDCに互換のメモリDC作成
メモリDCにビットマップ選択
ウィンドウDCからメモリDCへBitBltでコピー
メモリDCのビットマップ選択を解除
メモリDC解放
ウィンドウDC解放
GetDIBitsでビットマップのデータをbitmapbuffバッファにコピー
ビットマップ解放
最終的な目的によって道が異なりますね。
画面上のビットデータを取得してど~したいんでしょう。
Windowをキャプチャしたいならwclrp ( 'o')さんの通り。
ビットマップ内のビットデータが取得したいなら、
別の方法になります。
便乗質問なのですが
ウィンドウクラスに関連付けられている(?)デバイスコンテキストの
ビットマップは、操作どころか、情報を読み取ることもできないのでしょうか?
GetObjectをつかってみても、BITMAP構造体に読み込むことができませんでした
また、もし上記のことに関する内容がMSDNに載っているのなら
どこに載っているのか教えてもらえませんでしょうか
よろしくお願いします
情報源は知らない。
実際試したことないので俺は知らない。
DCってデバイスとペンの色や太さなどを管理しているもので、
一つのDCにウィンドウとビットマップを持たせるとか無理なんじゃない(推測)。
まして、ウィンドウのサイズが変わるとビットマップのサイズも変わるとか無理だとおもう。
メモリDCを用意した時点では、
モノクロで大きさ1ピクセルの既定ビットマップが選択されている
という話はCreateCompatibleDCにある。
だけどウィンドウのDCにビットマップ関連の処理したらどうなるかは
GetDCのリファレンスには書かれていないね。
メモリDCを使わないとビットマップを描画できないとか
互換性が無いDC間ではBitBltできないとか
DCって独特というかイメージがつかみにくい。
正しくは
DCってデバイス(ウィンドウやプリンタなど)と、ペンやブラシなどを選択したもの
かな?
そもそもSelectObjectでビットマップを選択できるのはメモリデバイスコンテキストに
限定される(とMSDNライブラリにも書いてある)ので、ウィンドウやプリンタから直接ビ
ットマップのハンドルを取得することができないのでは?
wclrp ( 'o')さんが書かれているようにコンパチなメモリデバイスコンテキストやビッ
トマップを作ってそちらに対してGetObjectするしかない。
皆様有り難う御座いました。
無事に解決いたしました。