(AHK)(AutoHotkey)(ちょっとした薀蓄)(下の記事の続きです)

 下の記事にも何度か出てきた おまじないのように羅列された 『BMPファイルのイメージ』の内容の内訳です
(圧縮などを考えると頭痛いので ここでは 無圧縮 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
1
2
3
4
5
6
7
8
9
10

 また 行ごとのデータは 4の倍数バイトごとに保存されるので
足りない分は 00 で埋められてしまいます
つまり 横2pxの場合 1行あたりは 6バイト(3バイトx2)で十分なんですが
ビットマップデータの取り決め上 この場合は 6よりも次に大きい 4の倍数 の 8バイト が必要になり
2バイト分の 「00 00」 が 行末に追加されます