太阳不下山 发表于 2021-7-13 09:18:18

【IoT】 产品研发:位深为1的BMP格式图片详解

  1、数据结构一
  typedef struct tagBITMAPFILEHEADER {
  WORD bfType; //类型名,字符串“BM”,
  DWORD bfSize; //文件大小
  WORD bfReserved1; //保留字
  WORD bfReserved2; //保留字
  DWORD bfOffBits; //实际位图数据的偏移字节数,即前三个部分长度之和
  } BITMAPFILEHEADER;
  对应数据:

  WORD bfType : 0x4d42
  DWORD bfSize:0x16cbe
  WORD bfReserved1:0x0
  WORD bfReserved2:0x0
  DWORD bfOffBits:0x3e
  2、数据结构二
  typedef struct tagBITMAPINFOHEADER {
  DWORD biSize; //指定此结构体的长度,0x28
  LONG biWidth; //位图宽
  LONG biHeight; //位图高.为正,表示从下往上存储,左下角是起点。为负,表示从上往下储存,左上角是起点
  WORD biPlanes; //平面数,为1
  WORD biBitCount //采用颜色位数,可以是1,2,4,8,16,24,32
  DWORD biCompression; //压缩方式,可以是0,1,2,其中0表示不压缩
  DWORD biSizeImage; //实际位图数据占用的字节数
  LONG biXPelsPerMeter; //X方向分辨率
  LONG biYPelsPerMeter; //Y方向分辨率
  DWORD biClrUsed; //使用的颜色数,如果为0,则表示默认值(2^颜色位数)
  DWORD biClrImportant; //重要颜色数,如果为0,则表示所有颜色都是重要的
  } BITMAPINFOHEADER;
  对应数据:

  DWORD biSize:0x28
  LONG biWidth:0x480
  LONG biHeight:0x288
  WORD biPlanes:0x1
  WORD biBitCount:0x1
  DWORD biCompression:0x0
  DWORD biSizeImage:0x16c80
  LONG biXPelsPerMeter:0x0
  LONG biYPelsPerMeter:0x0
  DWORD biClrUsed:0x0
  DWORD biClrImportant:0x0
  3、数据结构三
  1位位图有调色板2^1=2个
  对应是以下结构的数组:
  typedef struct tagRGBQUAD {
  BYTE rgbBlue; //蓝色
  BYTE rgbGreen; //绿色
  BYTE rgbRed; //红色
  BYTE rgbReserved; //保留值,常用于Alpha透明值
  } RGBQUAD;
  索引0:(B,G,R,A)=(0x0,0x0,0x0,0x0)
  索引1:(B,G,R,A)=(0xff,0xff,0xff,0x0)
  两个索引占用8个字节,之后都是数据区,数据紧密排列,无对齐操作。
  数据区操作方法:每次取一个字节,此字节的第7位到第0位是读取顺序。
  
 

  
文档来源:51CTO技术博客https://blog.51cto.com/u_15284384/3052374
页: [1]
查看完整版本: 【IoT】 产品研发:位深为1的BMP格式图片详解