BMP

参考:

测试图片:rgb.bmp(R: 0xFE0000, G: 0x00FE00, B: 0x0000FE)

文件头,固定14字节,最后4字节表示图像数据的起始位置。

typedef struct tagBITMAPFILEHEADER {
  WORD  bfType;
  DWORD bfSize;
  WORD  bfReserved1;
  WORD  bfReserved2;
  DWORD bfOffBits;
} __attribute__((packed)) BITMAPFILEHEADER, *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;


位图信息头,根据头4字节大小来确定用了哪种版本的位图信息头,一般是40,表示使用Windows V3版本的信息头。

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;
} __attribute__((packed)) BITMAPINFOHEADER, *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;


调色板,可选,其实是一个结构体数组,每个结构体占4字节,表示调色板中的一种颜色,当每个像素的深度大于24bit时,不需要调色板,如下:

typedef struct tagRGBQUAD {
  BYTE rgbBlue;
  BYTE rgbGreen;
  BYTE rgbRed;
  BYTE rgbReserved;
} __attribute__((packed)) RGBQUAD;


位图数据,存储像素内容,排布规则是从左下到右上,24位RGB按照BGR的顺序来存储,32位RGBA按BGRA顺序存储,每行数据的内容按4字节对齐,不够时补0。


Note:RGB565模式下,调色板对应的其实是16bit中RGB分量对应的掩码。



  • 无标签