bmp画像のデータ情報

2519 ワード

.bmp画像に対応するデータ構造:
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…