2012-01-09 13 views
0

24ビットbmpイメージで青い領域を探したい。青色のチャンネルを見つけるにはどうすればいいですか?青色のチャンネルにアクセスする方法は?bmp 24ビットファイル形式の青色チャネル

+1

何を試しましたか?どのようにビットマップにアクセスしていますか?手動で?図書館を通して?いくつかのコードを投稿してください。 –

答えて

0

24ビットピクセル(24bpp)形式は16,777,216の異なる色をサポートし、 と3バイトあたり1ピクセル値を格納します。各ピクセル値は、ピクセルの赤、緑、青のサンプル(RGBAX 表記で8.8.8.0.0)の を定義します。具体的には、青色、緑色、赤色の順で、各サンプルは で8ビットです。

... here

2

24ビットのビットマップ(.bmp)イメージのヘッダーは54バイトです。その後、ピクセルデータが来る。ピクセルごとに、青、緑、赤の順に3バイトが使用されます。

これを確認するには、1x1ピクセルのイメージをペイントで作成し、その1ピクセルを青色にします。ヘキサエディタで.bmpファイルを見ると、55バイト目にはFF(青色)の値が表示され、その後の2は00(緑色でない、赤色ではありません)と表示されます。もちろん、すべてのバイトを読み込むCプログラムを書くと、これも見ることができます。 55バイト目から最後までの値を出力すると、同じ値が表示されます。

ピクセルデータを整列させる必要があります。これはストライドと呼ばれます。ストライドは以下のように計算される:3x3のBMPで

stride = (width * bpp)/8; 

、ストライドがされる(3 * 24)/ 8 = 9この値は、(この場合は12)4で割り切れる数に切り上げされる必要がありますしたがって、ビットを正しく揃えるには、1行に3バイト余分のバイトが必要です。 4x4のBMP、ストライドのために

FF 00 00 FF 00 00 FF 00 00 00 00 00 
FF 00 00 FF 00 00 FF 00 00 00 00 00 
FF 00 00 FF 00 00 FF 00 00 00 00 00 

=(4 * 24)/ 8 = 12 12は、4で割り切れるので、余分はありません。すべてのバイトが青であるのであれば、54バイトの後にあなたが持っています必要なバイト数。 5x5 bmpの場合、ストライド=(5 * 24)/ 8 = 15なので、1行につき1つの余分なバイトが必要です。

bmpファイル形式の詳細については、this wikipedia pageを参照してください。お役に立てれば!

関連する問題