Re: 画像のピクセルごとの色はどうやって取得する? ( No.1 ) |
- 名前:IW 日時:2009/08/30 01:22
BITが 16になってるので、24とか 32にしたらどうなりますか?
GetPixelSoftImageの方はハンドルはハンドルでも SIハンドルなので、そのままでは使えません。
|
Re: 画像のピクセルごとの色はどうやって取得する? ( No.2 ) |
- 名前:Dixq 日時:2009/08/30 15:12
ご回答ありがとうございます。
ウィンドウモード、フルスクリーンモード、それぞれ
16,24,32ビットで実行した結果を先ほどのリンク先
h ttp://dixq.net/DXQuest/
に貼り付けましたのでご覧頂けると幸いです。
どういうわけか、ウィンドウモードは32ビットでうまくいくのに、
フルスクリーンだと、色はうまくいかないものの、サイズは16ビットでピッタリになるようですね・・。
|
Re: 画像のピクセルごとの色はどうやって取得する? ( No.3 ) |
- 名前:IW 日時:2009/08/30 21:41
あー、ひょっとすると GetColor2は画面モードに応じた色取得なので、
画像ハンドル内のデータフォーマットと一致していないのかもしれません。
GraphLockの引数を省略された引数を指定して、GetColor5で試してみて下さい。
ふと思ったのですが、GraphLockして調べなくてもCaptureオブジェクトの
BmpBufferメンバにキャプチャーしたデータを BMPの中身(色データのみ)が
格納されているような気がするのですが、どうでしょう?
(BmpHeaderメンバにはサイズ・色深度の情報が入っています)
|
Re: 画像のピクセルごとの色はどうやって取得する? ( No.4 ) |
- 名前:Dixq 日時:2009/08/31 23:07
ご回答ありがとうございます。
そうだったのですか、、わざわざ取得する必要は無かったのですね;
ただみたところ、void*型ということで何か変換しないと使えないようなので、
明日またどのようなデータ構造化調べてやってみたいと思います。
|
Re: 画像のピクセルごとの色はどうやって取得する? ( No.5 ) |
- 名前:管理人 日時:2009/09/03 22:31
CAPTUREDATA 構造体の BmpBuffer メンバ変数にはビットマップイメージが
格納されているメモリアドレスが格納されています。
ビットマップイメージがどのようなフォーマットなのかは BmpHeader メンバ変数
の内容で知ることができますが、ほぼ間違いなく24bitカラーですので青・緑・赤の順で
ドットの色情報が格納されていると思います。
( ( BYTE * )pData->BmpBuffer )[ 0 ] // 座標( 0, 0 )の青
( ( BYTE * )pData->BmpBuffer )[ 1 ] // 座標( 0, 0 )の緑
( ( BYTE * )pData->BmpBuffer )[ 2 ] // 座標( 0, 0 )の赤
( ( BYTE * )pData->BmpBuffer )[ 3 ] // 座標( 1, 0 )の青
( ( BYTE * )pData->BmpBuffer )[ 4 ] // 座標( 1, 0 )の緑
( ( BYTE * )pData->BmpBuffer )[ 5 ] // 座標( 1, 0 )の赤
1ラインのバイト数は4の倍数に補正されるようになっていますので、
例えば座標( 8, 16 )の色を取得したい場合は
int Pitch ; // 1ラインに使われているバイト数は Pitch と呼ばれています
// 1ラインのピッチはビットマップの幅 * 3バイト
Pitch = pData->BmpHeader.biWidth * 3 ;
// 4の倍数に合わせる計算
Pitch = ( Pitch + 3 ) / 4 * 4 ;
( ( BYTE * )pData->BmpBuffer )[ 8 * 3 + 16 * Pitch ] // 座標( 8, 16 )の青
( ( BYTE * )pData->BmpBuffer )[ 8 * 3 + 16 * Pitch + 1 ] // 座標( 8, 16 )の緑
( ( BYTE * )pData->BmpBuffer )[ 8 * 3 + 16 * Pitch + 2 ] // 座標( 8, 16 )の赤
のようにします。
|