BMP文件的存儲格式

BMP文件組成

在這裏插入圖片描述

BMP文件頭

typedef struct tagBITMAPFILEHEADER 
{
  WORD     bfType; // BM
  DWORD   bfSize;// 文件大小
  WORD     bfReserved1;// 0
  WORD     bfReserved2;// 0
  DWORD  bfOffBits; //位圖數據的起始位置,
}BITMAPFILEHEADER; 

位圖信息頭

typedef struct tagBITMAPINFOHEADER
{
    DWORD    biSize; 
    LONG        biWidth;  
    LONG        biHeight; 
    WORD       biPlanes;   //
    WORD       biBitCount;   // 每個像素所需的位數,
    DWORD    biCompression;     // 位圖壓縮類型,
    DWORD    biSizeImage;      // 位圖的大小,
    LONG        biXPelsPerMeter;    // 
    LONG        biYPelsPerMeter;    // 
    DWORD    biClrUsed;     // 顏色數
    DWORD    biClrImportant;    // 重要的顏色數
} BITMAPINFOHEADER;

顏色表

typedef struct tagRGBQUAD
{
BYTE   rgbBlue;// 藍色
BYTE   rgbGreen; // 綠色
BYTE   rgbRed; // 紅色
BYTE   rgbReserved;// 0
} RGBQUAD; 

位圖信息-- BITMAPINFO結構

struct tagBITMAPINFO 
{
	BITMAPINFOHEADER bmiHeader;
	RGBQUAD bmiColors[1]; // 顏色表
} BITMAPINFO;

在這裏插入圖片描述

1個像素的真彩色文件

在這裏插入圖片描述
前14個字節,bitmapfileheader內容:

  • 42 4D:代表BMP
  • 3A 00 00 00:反過來整個區域大小
  • 00 00 00 00 :保留字
  • 36 00 00 00:反過來數字的偏移是36,那麼我們走到第36字節看一下,發現是FF FF FF ,正好是我們這一個白像素1。

接下來40字節,bitmapinfoheader內容:

  • 28 00 00 00:bisize
  • 01 00 00 00:biwidth
  • 01 00 00 00:biheight
  • 01 00:位平面數
  • 18 00:真彩色24位
  • 00 00 00 00:壓縮方式
  • 04 00 00 00:位圖數據的字節數,加上結尾,一共有四個字節
  • 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00:標準圖像全0

接下來是RGBQUAD顏色表
然後是數據區!!

1個像素的256僞彩色文件

在這裏插入圖片描述
在這裏插入圖片描述

256位圖文件調色板

  • 調色板 256項;
  • 所佔字節數:256*4=1024;
  • 1024/16=64行;
  • 總行數43h=4*16+3=67行;
  • 文件頭佔 3行;
  • 每行16字節,可以存儲4個表項,
  • 64*4=256個表項。

文件打開流程圖

在這裏插入圖片描述

圖像顯示流程圖

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章