デバイスコンテキストからBitMapデータの取得 – プログラミング – Home

デバイスコンテキストからBitMapデ...
 
通知
すべてクリア

[解決済] デバイスコンテキストからBitMapデータの取得


2tom
 2tom
(@2tom)
ゲスト
結合: 16年前
投稿: 7
Topic starter  

はじめまして。
現在、ウィンドウ上に表示した絵を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になり、
エラーが発生しているようです。
ご教授を御願い致します。


引用未解決
トピックタグ
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

どっかにスクリーンキャプチャのサンプルありそうだけどな。

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バッファにコピー
ビットマップ解放


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

最終的な目的によって道が異なりますね。
画面上のビットデータを取得してど~したいんでしょう。

Windowをキャプチャしたいならwclrp ( 'o')さんの通り。

ビットマップ内のビットデータが取得したいなら、
別の方法になります。


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

便乗質問なのですが

ウィンドウクラスに関連付けられている(?)デバイスコンテキストの
ビットマップは、操作どころか、情報を読み取ることもできないのでしょうか?
GetObjectをつかってみても、BITMAP構造体に読み込むことができませんでした

また、もし上記のことに関する内容がMSDNに載っているのなら
どこに載っているのか教えてもらえませんでしょうか
よろしくお願いします


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

情報源は知らない。
実際試したことないので俺は知らない。

DCってデバイスとペンの色や太さなどを管理しているもので、
一つのDCにウィンドウとビットマップを持たせるとか無理なんじゃない(推測)。
まして、ウィンドウのサイズが変わるとビットマップのサイズも変わるとか無理だとおもう。

メモリDCを用意した時点では、
モノクロで大きさ1ピクセルの既定ビットマップが選択されている
という話はCreateCompatibleDCにある。
だけどウィンドウのDCにビットマップ関連の処理したらどうなるかは
GetDCのリファレンスには書かれていないね。

メモリDCを使わないとビットマップを描画できないとか
互換性が無いDC間ではBitBltできないとか
DCって独特というかイメージがつかみにくい。


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

正しくは
DCってデバイス(ウィンドウやプリンタなど)と、ペンやブラシなどを選択したもの
かな?


返信引用
ISLe
 ISLe
(@ISLe)
ゲスト
結合: 18年前
投稿: 38
 

そもそもSelectObjectでビットマップを選択できるのはメモリデバイスコンテキストに
限定される(とMSDNライブラリにも書いてある)ので、ウィンドウやプリンタから直接ビ
ットマップのハンドルを取得することができないのでは?

wclrp ( 'o')さんが書かれているようにコンパチなメモリデバイスコンテキストやビッ
トマップを作ってそちらに対してGetObjectするしかない。


返信引用
2tom
 2tom
(@2tom)
ゲスト
結合: 16年前
投稿: 7
Topic starter  

皆様有り難う御座いました。
無事に解決いたしました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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