4

以下はビットマップの16進データです

424d 46000000000000000000003E00000028000000 02000000 020000000100 0100 00000000 080000000000000000000000000000000000000000000000000000000000000000

すべての値が表すもの、特にピクセル値を理解する必要があります。これは mspaint で保存されたビットマップで、モノクロのビットマップです。以下は私の理解/誤解です...これのほとんどは、wikiと検索bmpから得た情報です。これは、上部に 2 つの黒いピクセルがあり、下部に 2 つの白いピクセルがある bmp を分解しようとしているだけです。

42 4d       is BM
46 00 00 00 size of entire file
00 00       reserved 1
00 00       reserved 2
3e 00 00 00 offset to where pixel data can be found

28 00 00 00 # of bytes in this header
02 00 00 00 width of bmp
02 00 00 00 height of bmp
01 00       # of planes
01 00       # of bits per pixel
00 00 00 00 compression
08 00 00 00 size of raw data in pixel array in bytes
00 00 00 00 horizontal resolution pix/m
00 00 00 00 vertical resolution pix/m
00 00 00 00 number of colors
00 00 00 00 important colors
00 00 00 00  x=1 y=2  pixel value?  is supposed to be white
ff ff ff 00  x=2 y=2  pixel value?  is supposed to be white
c0 00 00 00  x=1 y=1  pixel value?  is supposed to be black
00 00 00 00  x=2 y=1  pixel value?  is supposed to be black

最後のピクセル値は本当に紛らわしいです。それらが等しいはずの値とどのように等しいかわかりません。さらに、rgb または bgr データはわずか 3 バイトだと思いましたか? また、ピクセルデータを見つけることができる場所へのオフセットは、ビットマップの最後のバイトを2バイト過ぎています...完全に間違っているか何かをデコードしているように感じます。

4

2 に答える 2

3

c0 00 00 00

このブロックの最後の 3 バイトはパディング用です

行の長さを 4 バイトの倍数にするために、パディング バイト (必ずしも 0 ではない) を行の末尾に追加する必要があります。ピクセル配列がメモリに読み込まれるとき、各行は 4 の倍数であるメモリ アドレスで開始する必要があります。

于 2013-05-05T19:20:23.633 に答える