(AHK)(AutoHotkey)(ちょっとした薀蓄)(下の記事の続きです)
下の記事にも何度か出てきた おまじないのように羅列された 『BMPファイルのイメージ』の内容の内訳です
(圧縮などを考えると頭痛いので ここでは 無圧縮 24bitカラー で考えます)
左から右に走査するのを 下から上に向かって行われます
つまり 人間的な感覚とは 上下逆転して保存されていることになりますね
横10px 縦3px の場合の記録される順番
また 行ごとのデータは 4の倍数バイトごとに保存されるので
足りない分は 00 で埋められてしまいます
つまり 横2pxの場合 1行あたりは 6バイト(3バイトx2)で十分なんですが
ビットマップデータの取り決め上 この場合は 6よりも次に大きい 4の倍数 の 8バイト が必要になり
2バイト分の 「00 00」 が 行末に追加されます
(圧縮などを考えると頭痛いので ここでは 無圧縮 24bitカラー で考えます)
BITMAPFILEHEADER (14Byte) 2 bfType 42 4D 4 bfSize 3A 00 00 00 2 bfReserved1 00 00 2 bfReserved2 00 00 4 bfOffBits 36 00 00 00 BITMAPINFOHEADER (40Byte) 4 biSize 28 00 00 00 4 biWidth 01 00 00 00 4 biHeight 01 00 00 00 2 biPlanes 01 00 2 biBitCount 18 00 4 biCompression 00 00 00 00 4 biSizeImage 04 00 00 00 4 biXPixPerMeter 00 00 00 00 4 biYPixPerMeter 00 00 00 00 4 biClrUsed 00 00 00 00 4 biClrImporant 00 00 00 00 ビットマップデータ 4 1行目 FF FF FF 00それでは もし 2x2だったらどうなるのか?
BITMAPFILEHEADER (14Byte) 2 bfType 42 4D 4 bfSize 46 00 00 00 2 bfReserved1 00 00 2 bfReserved2 00 00 4 bfOffBits 36 00 00 00 BITMAPINFOHEADER (40Byte) 4 biSize 28 00 00 00 4 biWidth 02 00 00 00 4 biHeight 02 00 00 00 2 biPlanes 01 00 2 biBitCount 18 00 4 biCompression 00 00 00 00 4 biSizeImage 10 00 00 00 4 biXPixPerMeter 00 00 00 00 4 biYPixPerMeter 00 00 00 00 4 biClrUsed 00 00 00 00 4 biClrImporant 00 00 00 00 ビットマップデータ 8 1行目 FF FF FF FF FF FF 00 00 8 2行目 FF FF FF FF FF FF 00 00画像の記録のされ方は 人間的な感覚とは違い
左から右に走査するのを 下から上に向かって行われます
つまり 人間的な感覚とは 上下逆転して保存されていることになりますね
横10px 縦3px の場合の記録される順番
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
また 行ごとのデータは 4の倍数バイトごとに保存されるので
足りない分は 00 で埋められてしまいます
つまり 横2pxの場合 1行あたりは 6バイト(3バイトx2)で十分なんですが
ビットマップデータの取り決め上 この場合は 6よりも次に大きい 4の倍数 の 8バイト が必要になり
2バイト分の 「00 00」 が 行末に追加されます