bmpファイルフォーマットの詳細
BMPファイル構造
----1.BMPファイル構成
----BMPファイルはファイルヘッダ、ビットマップ情報ヘッダ、カラー情報、グラフィックデータの4つの部分から構成されています.
----2.BMPファイルヘッダ
----BMPファイルヘッダデータ構造には、BMPファイルの種類、ファイルサイズ、ビットマップの開始位置などの情報が含まれています.
----その構造定義は以下の通りである.
ーーカラーテーブルはビットマップの色を説明するために使用され、いくつかのテーブル項目があり、各テーブル項目はRGBQUADタイプの構造であり、色を定義します.RGBQUAD構造の定義は以下の通りです.
----ビットマップデータはビットマップの各ピクセル値を記録しています.記録順序はスキャン行の中で左から右、スキャン行の間で下から上までです.ビットマップのピクセル値のバイト数:
スキャン行のバイト数計算方法:DataSizePerLine=(biWidth*BiBitCount+31)/8;
//走査行のバイト数DataSizePerLine=DataSizePerLine/4*4バイト数は4の倍数でなければなりません.
ビットマップデータのサイズ(非圧縮の場合):DataSize=DataSizePerLine*biHeight;
----1.BMPファイル構成
----BMPファイルはファイルヘッダ、ビットマップ情報ヘッダ、カラー情報、グラフィックデータの4つの部分から構成されています.
----2.BMPファイルヘッダ
----BMPファイルヘッダデータ構造には、BMPファイルの種類、ファイルサイズ、ビットマップの開始位置などの情報が含まれています.
----その構造定義は以下の通りである.
typedef struct tagBITMAPFILEHEADER
{
WORDbfType; // , BM
DWORD bfSize; // ,
WORDbfReserved1; // , 0
WORDbfReserved2; // , 0
DWORD bfOffBits; // ,
// ,
} BITMAPFILEHEADER;
----3.ビットマップヘッダBMP 。
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; //
LONGbiWidth; // ,
LONGbiHeight; // ,
WORD biPlanes; // , 1
WORD biBitCount// , 1( ),
// 4(16 ),8(256 ) 24( )
DWORD biCompression; // , 0( ),
// 1(BI_RLE8 ) 2(BI_RLE4 )
DWORD biSizeImage; // ,
LONGbiXPelsPerMeter; // ,
LONGbiYPelsPerMeter; // ,
DWORD biClrUsed;//
DWORD biClrImportant;//
} BITMAPINFOHEADER;
----4.カラーテーブルーーカラーテーブルはビットマップの色を説明するために使用され、いくつかのテーブル項目があり、各テーブル項目はRGBQUADタイプの構造であり、色を定義します.RGBQUAD構造の定義は以下の通りです.
typedef struct tagRGBQUAD {
BYTErgbBlue;// ( 0-255)
BYTErgbGreen; // ( 0-255)
BYTErgbRed; // ( 0-255)
BYTErgbReserved;// , 0
} RGBQUAD;
RGBQUAD biBitCount :
biBitCount=1,4,8 , 2,16,256 ;
biBitCount=24 , 。
,BITMAPINFO :
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader; //
RGBQUAD bmiColors[1]; //
} BITMAPINFO;
----5.ビットマップデータ----ビットマップデータはビットマップの各ピクセル値を記録しています.記録順序はスキャン行の中で左から右、スキャン行の間で下から上までです.ビットマップのピクセル値のバイト数:
biBitCount=1 ,8 1 ;
biBitCount=4 ,2 1 ;
biBitCount=8 ,1 1 ;
biBitCount=24 ,1 3 ;
Windowsではスキャン行のバイト数は4の倍数(つまりlong単位)でなければならないと規定されています.足りないのは0で満たされています.スキャン行のバイト数計算方法:DataSizePerLine=(biWidth*BiBitCount+31)/8;
//走査行のバイト数DataSizePerLine=DataSizePerLine/4*4バイト数は4の倍数でなければなりません.
ビットマップデータのサイズ(非圧縮の場合):DataSize=DataSizePerLine*biHeight;