星期四, 11月 05, 2009

Week 08: BMP Format (2)

// 宣告一個資料型態 BMP_Header_TYPE,
// 其結構為 BMP 檔頭中, 有關 File Information 的部分

typedef struct {
 unsigned char ucTyte[2]; // 固定為 'BM', 用以辨認是否為 DIB
 unsigned char ucFileSize[4]; // 檔案長度
 short sReserved1; // 固定為 0 , 保留未用
 short sReserved2; // 固定為 0 , 保留未用
 unsigned char ucOffset[4]; // 儲存圖像資料到檔頭的距離
 } BMP_Header_TYPE;

// 宣告一個變數 Header[1], 其型態為剛剛宣告的 BMP_Header_TYPE

BMP_Header_TYPE Header[1];

// 宣告一個資料型態 BitmapInfoHeader_TYPE ,
// 其結構為 BMP 檔頭中, 有關 Bitmap Information 的部分

typedef struct {
 unsigned char ucSize[4];  // 宣告圖像基本資料的大小 ( = 40 )
 unsigned char ucWidth[4];  // 圖像的寬度, 以 pixel 為單位
 unsigned char ucHeight[4]; // 圖像的高度, 以 pixel 為單位
 unsigned char ucPlanes[2]; // 固定存入 1
 unsigned char ucBitCount[2]; // 宣告每個 pixel 需要多少 bit 儲存
 unsigned char ucCompression[4]; 
      // 宣告圖像壓縮方式, 可能的值有 3 種 : 0, 1, 2

 unsigned char ucImageSize[4]; 
      // 影像大小, 以 Byte 為單位 ( W*H*BitCount / 8 )

 unsigned char ucXPixelsPerMeter[4]; 
      // 宣告圖像在 X 方向於 1 公尺有多少 pixel ,
 unsigned char ucYPixelsPerMeter[4]; 
      // 宣告圖像在 Y 方向於 1 公尺有多少 pixel ,
 unsigned char ucUsedColor[4]; 
      // 宣告圖像資料實際用到的顏色數目 ( 0表示用光 )
 unsigned char ucImportantColor[4];
      // 宣告調色盤中, 多少顏色在顯示時是重要的
 } BitmapInfoHeader_TYPE;

// 宣告一個變數 BitmapInfoHeader[1],
// 其型態為剛剛宣告的 BitmapInfoHeader_TYPE

BitmapInfoHeader_TYPE BitmapInfoHeader[1];

// 宣告一個資料型態 Palette_COLOR_TYPE ,
// 其結構為 BMP 檔頭中, 有關 Palette 的部分

typedef struct {
 Byte bBlue;
 Byte bGreen;
 Byte bRed;
 Byte bReserved;
 } Palette_COLOR_TYPE;

// 宣告 256 個變數 PaletteColors[256] 用來儲存調色盤的顏色,
// 型態為剛宣告的 Palette_COLOR_TYPE

Palette_COLOR_TYPE PaletteColors[256];

// 宣告 2 個變數; 儲存檔案結束控制碼

unsigned char ucFileEnd[2]; // 檔案的最後有 2 個 byte 的 0

 參考程式

沒有留言:

張貼留言