bmp画像のデータ情報
2519 ワード
.bmp画像に対応するデータ構造:
BMPはファイルヘッダ、ビットマップ情報ヘッダ、色情報、図形情報の4つの部分から構成される.
1、BMPファイルヘッダ(14):
bmpファイルヘッダのデータ構造には、bmpファイルの種類、ファイルサイズ、ビットマップの開始位置などの情報が含まれています.
その構造の定義は以下の通りである.
カラーテーブルはビットマップの色を説明するために使用されます.各テーブルはRGBQUADタイプの構造であり、色を定義します.RGBQUAD構造の定義は以下の通りです.
BitCount=1,4,8の時、それぞれ2,16,256のテーブル項目があります.
BitCount=24の場合、カラーテーブルの項目がありません.
ビットマップ情報ヘッダとカラーテーブルはビットマップ情報を構成し、BITM API NF構造は以下のように定義される.
ビットマップデータはビットマップの各ピクセル値を記録しています.記録順序はスキャン行内で左から右、スキャン行の間で下から上までです.ビットマップのピクセル値のバイト数:
BitCount=1の場合、8画素は1バイトを占める.
BitCount=4の場合、2つの画素は1バイトを占める.
BitCount=8の場合、1画素は1バイトを占める.
BitCount=24の場合、1画素は3バイトを占める.
Windowsではスキャン行のバイト数は必ず
4の倍数(つまりlong単位)で足りないものは0で充填します.
ビシゼImage=(((bi.biWidth*bi.bibit Count)+31)&~8)*bi.biHeight;
具体的なデータ例:
あるBMPファイルの先頭のように:
424 D 4690000 000 0000 A 00 4600万円2800万円0100*1000 0300 00 0000 A 00 F 0000 A 00 00 F 0000 A 00 00 00 F 00 00 00 00 00 00 00 00 00万円*00 F 8 E 007 1 F 00 00 00 00 00*02 F 1 84F 1 84 F 1 060 F 2 846 F 2 F 2 86 F 86 F 2 86.F 86.F 86.F 86…
BMPはファイルヘッダ、ビットマップ情報ヘッダ、色情報、図形情報の4つの部分から構成される.
1、BMPファイルヘッダ(14):
bmpファイルヘッダのデータ構造には、bmpファイルの種類、ファイルサイズ、ビットマップの開始位置などの情報が含まれています.
その構造の定義は以下の通りである.
typedef struct tagBITMAPFILEHEADER
{
WORD bfType; // , BM(1-2 )
DWORD bfSize; // , (3-6 )
WORD bfReserved1; // , 0(7-8 )
WORD bfReserved2; // , 0(9-10 )
DWORD bfOffBits; // , (11-14 )
// ,
} BITMAPFILEHEADER;
2、ビットマップ情報ヘッダ(40バイト):BMP 。
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; // (15-18 )
LONG biWidth; // , (19-22 )
LONG biHeight; // , (23-26 )
WORD biPlanes; // , 1(27-28 )
WORD biBitCount;// , 1( ),(29-30 )
// 4(16 ),8(256 ) 24( )
DWORD biCompression; // , 0( ),(31-34 )
// 1(BI_RLE8 ) 2(BI_RLE4 )
DWORD biSizeImage; // , (35-38 )
LONG biXPelsPerMeter; // , (39-42 )
LONG biYPelsPerMeter; // , (43-46 )
DWORD biClrUsed;// (47-50 )
DWORD biClrImportant;// (51-54 )
} BITMAPINFOHEADER;
3:カラーテーブルカラーテーブルはビットマップの色を説明するために使用されます.各テーブルはRGBQUADタイプの構造であり、色を定義します.RGBQUAD構造の定義は以下の通りです.
typedef struct tagRGBQUAD {
BYTE rgbBlue;// ( 0-255)
BYTE rgbGreen; // ( 0-255)
BYTE rgbRed; // ( 0-255)
BYTE rgbReserved;// , 0
} RGBQUAD;
カラーテーブルのRGBQUAD構造データの個数はBitCountで決定されます.BitCount=1,4,8の時、それぞれ2,16,256のテーブル項目があります.
BitCount=24の場合、カラーテーブルの項目がありません.
ビットマップ情報ヘッダとカラーテーブルはビットマップ情報を構成し、BITM API NF構造は以下のように定義される.
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader; //
RGBQUAD bmiColors[1]; //
} BITMAPINFO;
4、ビットマップデータビットマップデータはビットマップの各ピクセル値を記録しています.記録順序はスキャン行内で左から右、スキャン行の間で下から上までです.ビットマップのピクセル値のバイト数:
BitCount=1の場合、8画素は1バイトを占める.
BitCount=4の場合、2つの画素は1バイトを占める.
BitCount=8の場合、1画素は1バイトを占める.
BitCount=24の場合、1画素は3バイトを占める.
Windowsではスキャン行のバイト数は必ず
4の倍数(つまりlong単位)で足りないものは0で充填します.
ビシゼImage=(((bi.biWidth*bi.bibit Count)+31)&~8)*bi.biHeight;
具体的なデータ例:
あるBMPファイルの先頭のように:
424 D 4690000 000 0000 A 00 4600万円2800万円0100*1000 0300 00 0000 A 00 F 0000 A 00 00 F 0000 A 00 00 00 F 00 00 00 00 00 00 00 00 00万円*00 F 8 E 007 1 F 00 00 00 00 00*02 F 1 84F 1 84 F 1 060 F 2 846 F 2 F 2 86 F 86 F 2 86.F 86.F 86.F 86…