A!die Software Studio Welcome to A!Die Software Studio

设备无关位图的结构

by adie
2010-12-09 17:08:44
    设备无关位图(Device Independent Bitmap) 有 Window 和 OS/2 两种格式,这两种格式大致相仿。


位图文件头结构 BITMAPFILEHEADER
位图信息头结构 BITMAPINFOHEADER
位图颜色表 RGBQUAD
位图象素数据

三个头结构在 windows.h 中定义如下:
typedef struct tagBITMAPFILEHEADER
{
  UINT bfType;	// 字节 "BM"
  DWORD bfSize;	// 文件总字节数
  UINT bfReserved1;	// 0
  UINT bfReserved2;	// 0
  DWORD bfoffBits;	// 位图数据文件据文件头的偏移量
} BITMAPFILEHEADER;

typedef struct tagBITMAPINFO
{
  BITMAPINFOHEADER bmiHeader;
  RGBQUAD bmiColors[1];
} BITMAPINFO;

typedef struct tagBITMAPINFOHEADER
{
  DWORD biSize;	// 本结构大小的字节数
  LONG biWidth;	// 位图宽度,象素单位
  LONG biHeight;	// 位图高度,象素单位
  WORD biPlanes;	// 1
  WORD biBitCount;	// 位图象素的位数,可为 1(2 色)、4(16 色)、8(256 色)、24(真色彩)
  DWORD biCompression;	// 压缩方式, 0 不压缩
  DWORD biSizeImage;	// 位图数据字节数
  LONG biXPelsPerMeter;	// 水平分辨率,象素点每米
  LONG biYPelsPerMeter;	// 垂直分辨率,~
  DWORD biClrUsed;	// 不为 0 表示图像中使用的颜色数,即颜色表的表项数;
                  	// 为 0 表示颜色表是满的,即表项个数为 (2^象素位数) 个
  DWORD biClrImportant;	// 图像中重要的颜色数
} BITMAPINFOHEADER;

typedef struct tagRGBQUAD
{
  BYTE regBlue;	// 蓝色比例
  BYTE rgbGreen;	// 绿色比例
  BYTE rgbRed;	// 红色比例
  BYTE rgbReserved;	// 0
} RGBQUAD;
			
     24 位位图颜色表为空,不使用调色板,其象素值就是颜色值;颜色表一般将重要的颜色放在前面。对 4 位或 8 位位图,可以采用 RLE(游程长度编码) 压缩,分别称为 RLE4 和 RLE8 位图。
      位图数据紧跟在颜色表后面,以行位单位存储,每行都被填充到一个 4 字节边界,即每行所占的存储长度总是 4 字节(32 位)的倍数,不足时用 0 填充。 位图行的存储顺序是颠倒的,即位图文件中第一行数据对应的是位图的最底行。
      1 位象素的位图,每个象素占一位,一个字节存储 8 个象素,字节的高位对应最左边的象素。
      4 位象素的位图没压缩时一字节存储 2 个象素,高四位对应最左边的象素。
      4 位象素的位图采用 RLE 压缩时由一系列组来组成,有三种类型的组:重复组、文字组、特殊组。
      8 位象素的位图没有压缩时一字节存储一个象素。
      8 位象素的位图采用 RLE 压缩也由同样的三种类型组构成。
      24 位象素的位图每象素占三字节,从左到右的每一字节分别存储蓝、绿、红的颜色值。


      OS/2 DIB 和 Windows DIB 只有位图信息头结构和颜色表结构(第 2 、3 两项)不同,它们的存储方式是一样的。 OS/2 中的定义如下:
typedef struct tagBITMAPCOREINFO
{
  BITMAPCOREHEADER bmciHeader;
  RGBTRIPLE bmciColors[1];
} BITMAPCORE;

typedef struct tagBITMAPCOREHEADER
{
  DWORD bcSize;	// 本结构大小的字节数
  WORD bcWidth;	// 位图宽度,象素单位
  WORD bcHeight;	// 位图高度,象素单位
  WORD bcPlanes;	// 1
  WORD bcBitCount;	// 位图象素的位数,可为 1(2 色)、4(16 色)、8(256 色)、24(真色彩)
} BITMAPCOREHEADER;

typedef struct tagRGBTRIPLE
{
  BYTE rgbtBlue;
  BYTE rgbtGreen;
  BYTE rgbtRed;
} RGBTRIPLE;
			

▲评论

X 正在回复:
姓 名: 留下更多信息
性 别:
邮 件:
主 页:
Q Q:
来 自:
职 业:
评 论:


Valid HTML 4.01 Strict Valid CSS!
Copyleft.A!die Software Studio.ADSS
Power by webmaster@adintr.com