您的当前位置:首页位图结构

位图结构

2020-03-21 来源:乌哈旅游
BMP位图结构解析

2010年12月09日

BMP位图由一个位图文件头BITMAPFILEHEADER、一个位图信息BITMAPINFO、图像数据阵列组成。

1.位图文件头的结构为:

typedef struct tagBITMAPFILEHEADER(14字节)

{

WORD bfType; // 位图文件的类型,必须为BM

DWORD bfSize; // 位图文件的大小,以字节为单位

WORD bfReserved1; // 位图文件保留字,必须为0

WORD bfReserved2; // 位图文件保留字,必须为0

DWORD bfOffBits; // 位图数据的起始位置,以相对于位图

// 文件头的偏移量表示,以字节为单位

} BITMAPFILEHEADER, *PBITMAPFILEHEADER;

① bfType:大小为两个字节,固定为“BM”,表示该文件为bmp文件

② bfSize:位图的大小,单位为字节

③ bfReserved1、bfReserved2为系统保留

④ bfOffBits:文件起始位置到图像数据的偏移.

当该位图为1位时(单色位图),偏移为3E

当该位图为4位时(16色位图),偏移为76

当该位图为8位时(256色位图),偏移为436

2.位图信息的结构为:

********typedef struct tagBITMAPINFO {(40字节)

BITMAPINFOHEADER bmiHeader;

RGBQUAD bmiColors[1];

} BITMAPINFO, *PBITMAPINFO;

位图信息结构包含一个位图信息头BITMAPINFOHEADER和一个调色板RGBQUAD;

********位图信息头的结构为:

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; 1

2

3

4 5

6 7

8

9

10

11

} BITMAPINFOHEADER, *PBITMAPINFOHEADER;

① biSize:位图信息头的长度,即本结构所占的字节为40字节

② biWidth:位图的宽,单位为像素(bottom—up时为正)

③ biHeight:位图的高,单位为像素(bottom—up时为正)

④ biPlanes:总是1

目标设备的平面数,所以(位图的位面数,因为只有一个平面)

⑤ biBitCount:每个像素的位数

有1(单色),4(16色),8(256色),16(64K色,高彩色),24(16M色,真彩色),32(4096M色,增强型真彩色,多一个透明度字节)。T408支持的是16位格式。

⑥ biCompression:压缩方式(代表bottom-up位图的压缩类型,top-dowm不能压缩)

指定位图是否压缩,有效的值为BI_RGB(0表示未压缩),BI_RLE8(256色,压缩方法为RLE8,),BI_RLE4(16色,压缩方法为RLE4),BI_BITFIELD(图像文件内的数据没有经过压缩处理,而且颜色表由表示红绿蓝的双字组成),BI_JPEG/BI_PNG(图像的格式)。

⑦ biSizeImage:用字节表示位图数据的大小。BI_RGB时为0.。

该数为4的倍数,数值上等于位图的宽度X位图高度X每个像素的字节数。

⑧ biXPelsPerMeter:用像素/米表示水平分辨率

⑨ biYPelsPerMeter:用像素/米表示垂直分辨率

⑩ biClrUsed:位图使用的颜色索引数。

为0则表示使用所有的调色板项,如果被压缩,则必须为0。

11 biClrImportant:对图像显示有重要影响的颜色索引值。如果为0,表示都重要

********调色板(颜色表)结构:

颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。

typedef struct tagRGBQUAD {

BYTE rgbBlue;

BYTE rgbGreen;

BYTE rgbRed;

BYTE rgbReserved;

} RGBQUAD;

① rgbBlue:蓝色分量

② rgbGreen:绿色分量

③ rgbRed:红色分量

④ rgbReserved:系统保留,必须为0

注意:当biBitCount为1时调色板的个数为2的一次方,即2个,表示两种颜色

当biBitCount为4时调色板的个数为2的4次方,即16,表示16种颜色

当biBitCount为8时调色板的个数为2的8次方,即256,表示256种颜色

当biBitCount为24时,没有调色板。

3.图像数据(有图像尺寸,像素位数,和压缩方式等共同决定 )

存储颜色强度的索引值或者真实的颜色强度值。

Sizeof(BITMAPFILEHEADER)=14字节

Sizeof(BITMAPINFOHEADER)=40字节

Sizeof(RGBQUAD)=4字节

当biBitCount为0时,图像的第一个像素在bfOffBits处,bfOffBits=14+40=54字节处,像素的值表示RGB值当biBitCount不为0时,图像的第一个像素在bfOffBits处,bfOffBits=14+40+4*(2的biBitCount次方)此时像素的值并不是表示RGB值,而是调色表的颜色索引

当biBitCount=1时,8个像素占1个字节;

当biBitCount=4时,2个像素占1个字节;

当biBitCount=8时,1个像素占1个字节;

当biBitCount=24时,1个像素占3个字节;

可以简单的理解为:当位图的的格式为30X30时,30%4=2,所以空出的两个像素用0填充。即每一行的第31,32个像素要 用0。

因篇幅问题不能全部显示,请点此查看更多更全内容