C言語でBMPファイルを読む01

̃Gg[͂ĂȃubN}[Nɒlj

BMPファイルを解剖しようというシリーズ


[BMPファイル全体]
■BITMAPFILEHEADER構造体
 先頭は”BM”、ファイルサイズ等
■BITIMAPINFO構造体
・BITMAPINFOHEADER構造体
 縦横サイズ、色数等
・RGBQUARD構造体(※フルカラーの場合は存在しない)
 RGB成分の強さ
■ビットマップデータ
 各ピクセルごとのデータを、左から右、下から上方向に格納。
 水平方向バイト数が4の倍数になるよう、0×00で埋められている。

[各構造体]

/*	BITMAPFILEHEADER構造体	*/
typedef	struct{
WORD	bfType;		/*	"BM"(0x424d)	*/
DWORD	bfSize;		/*	ファイルサイズ	*/
WORD	bfReserved1;/*	固定値0			*/
WORD	bfReserved2;/*	固定値0			*/
DWORD	bfOffBits;	/*	ファイル先頭~ビット配列までのoffset	*/
} BITMAPFILEHEADER_t;

/*	BITMAPINFOHEADER構造体	*/
typedef	struct	{
DWORD	biSize;			/*	構造体のサイズ		*/
LONG	biWidth;		/*	ビットマップの幅	*/
LONG	biHeitht;		/*	ビットマップの高さ	*/
WORD		biPlanes;	/*	固定値1(プレーンの数)*/
WORD	biBitCount;		/*	ピクセルあたりの色数(1,4,8,24)	*/
DWORD	biConpression;	/*	圧縮方式(0:非圧縮)	*/
DWORD	biSizeImage;	/*	ビットマップビットのサイズ(圧縮時のみ)	*/
LONG	biXPelsPerMeter;/*	水平方向解像度(pixel per meter)	*/
LONG	biYPelsPerMeter;/*	垂直方向解像度(pixel per meter)	*/
DWORD	biClrUsed;		/*	使用されている色数	*/
DWORD	biClrImportant;	/*	重要な色の数		*/
} BITMAPINFOHEADER_t;

/*	RGBGUARD構造体	*/
typedef	struct{
BYTE	rgbBlue;	/*	青の強さ(0-255)	*/
BYTE	rgbGreen;	/*	緑の強さ(0-255)	*/
BYTE	rgbRED;		/*	赤の強さ(0-255)	*/
BYTE	rgbReserved;
} RGBGUARD_t;

[注意]
■C言語freadで2byte以上の変数を読むと順序が変わって見える
 Windowsはリトルエンディアンだからとのこと。。。
 とりあえず1byteずつ読んで対応したが、、、


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です