图像文件格式BMP文件格式详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.2 BMP文件格式
BMP文件格式是Microsoft Windows下最常见的图像文件格式之一,它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的像素值在文件中的存放顺序为从左到右,从下到上,也就是说,在BMP文件中首先存放的是图像的最后一行像素,最后才存储图像的第一行像素,但对与同一行的像素,则是按照先左边后右边的的顺序存储的;另外一个需要关注的细节是:文件存储图像的每一行像素值时,如果存储该行像素值所占的字节数为4的倍数,则正常存储,否则,需要在后端补0,凑足4的倍数。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
5.2.1典型的BMP图像文件由四部分组成:
1、位图头文件数据结构
主要包含文件的大小、文件类型、图像数据偏离文件头的长度等信息;
2、位图信息数据结构
包含图象的尺寸信息、图像用几个比特数值来表示一个像素、图像是否压缩、图像所用的颜色数等信息;
3、调色板
包含图像所用到的颜色表,显示图像时需用到这个颜色表来生成调色板,但如果图像为真彩色,既图像的每个像素用24个比特来表示,文件中就没有这一块信息,也就不需要操作调色板。
4、位图数据
记录了位图的每一个像素值或该对应像素的颜色表的索引值,图像记录顺序是
在扫描行内是从左到右, 扫描行之间是从下到上。这种格式我们又称为Bottom_Up位图,当然与之相对的还有Up_Down形式的位图,它的记录顺序是从上到下的,对于这种形式的位图,也不存在压缩形式。
5.2.2 BMP文件结构
位图文件(bitmap file, BMP)格式是Windows采用的图像文件存储格式,在Windows 环境下运行的所有图像处理软件都支持这种格式。Windows3.0以后的BMP格式与显示设备无关,因此把这种BMP格式称为设备无关位图(Device Independentbit Bitmap , DIB)格式,Windows能够在任何类型的显示设备上显示BMP位图。BMP位图默认的文件扩展名是bmp。
1、文件结构
位图文件可看成由4个部分组成:位图文件头(Bitmap-File)、位图信息头
(Bitmap-Information Header)、彩色表(Color Table)和定义位图的字节阵列,它们的名称
和符号如下表1所示:
2、位图文件结构可综合在下表中:
3、结构详解
(1)位图文件头:它包含有关于文件类型、文件大小和存放位置等信息,在Windows 3.0以上版本的位图文件中用BITMSPFILEHEADER结构体来定义。位图文件头包含了图像类型、图像大小、图像数据存放地址和两个保留未使用的字段。BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。
其结构定义如下:
typedef struct tagBITMAPFILEHEADER{
WORD bfType; // 位图文件的类型,必须为BM
DWORD bfSize; // 位图文件的大小,以字节为单位
WORD bfReserved1; // 位图文件保留字,必须为0
WORD bfReserved2; // 位图文件保留字,必须为0
DWORD bfOffBits; // 位图数据的起始位置,以相对于位图
// 每个像素所需的位数,必须是1( 双色), 4(16 色),8(256 色)或24(真彩色)
// 文件头的偏移量表示,以字节为单位
} BITMAPFILEHEADER; //该结构占据14个字节。
(2)位图信息头:位图信息用BITMAPINFO结构体来定义,位图信息头包含了位图信息头的大小、图像的宽高、图像的色深、压缩说明图像数据的大小和其他一些参数。
BMP位图信息头数据用于说明位图的尺寸等信息。
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; // 本结构所占用字节数
LONG biWidth; // 位图的宽度,以像素为单位
LONG biHeight; // 位图的高度,以像素为单位
WORD biPlanes; // 目标设备的级别,必须为1
WORD biBitCount // 每个像素所需的位数,必须是1(双色) (黑白二色图),
// 4(16色),8(256色)或24(真彩色)之一(新的.bmp格式支持32位色)
DWORD biCompression; // 位图压缩类型,必须是0(不压缩),
// 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
DWORD biSizeImage; // 位图的大小,以字节为单位
LONG biXPelsPerMeter; // 位图水平分辨率,每米像素数
LONG biYPelsPerMeter; // 位图垂直分辨率,每米像素数
DWORD biClrUsed; // 位图实际使用的颜色表中的颜色数
DWORD biClrImportant; // 位图显示过程中重要的颜色数
} BITMAPINFOHEADER; //该结构占据40个字节
它由位图信息头和彩色表组成,前者用BITMAPINFOHEADER结构体定义,后者用RGBQUAD结构体定义。
1)彩色表的定位:应用程序进行彩色表的定位时,可使用存储在biSize成员中的信息来查找在BITMAPINFO结构体中的彩色表。
2)biBitCount:biBitCount=1表示位图最多有两种颜色,黑色和白色。图像数据阵列中的每一位表示一个pixel:biBiCount=4表示位图最多有16种颜色。每个像素用场bit表示,交用这4bit作为彩色表的表项来查找该像素的颜色。
3)ClrUsed:BITMAPINFOHEADER结构中的成员ClrUsed指定实际使用的颜色数目。
4)8bit/pixel的图像数据压缩:
BI_RLE8 8bit/pixel的RLE压缩编码,可使用编码方式和绝对方式中的任何一种进行压缩,这两种方式可在同一幅图中的任何地方使用。
编码方式由此及彼个字节组成,第一个字节指定使用相同颜色的像素数目,第二个字节指字使用的颜色索引。此外,这个字节对中的第一个字节可设置为0,联合使用第二个字节的值表示:
●第二个字节的值为0 行的结束
●第二个字节的值为1 图像结束
●第二个字节的值为2 其后的两个字节表示下一个像素从当前开始的水平和垂直位
置的偏移量
绝对方式第一个字节设置为0,而第二个字节设置为03h~0FFh之间的一个值。在这种方式中,第二个字节表示跟在这个字节后面的字节数,每个字节包含单个像素的颜色索引。
5)每个像素为4位的图像数据压缩:
BI_RLE4 每个像素为4位的RLE压缩编码,同样也可使用编码方式和绝对方式中的任何一种进行压缩,这两种方式也可在同一幅图中的任何地方使用。
编码方式由2个字节组成,第一个字节指定像素数目,第二个字节包含两种颜色索引。
绝对方式这个字节对中的第一个字节设置为0,第二个字节包含有颜色索引数,其后续字节包含有颜色索引,颜色索引存放在该字节的高、低4位中,一个颜色索引对应一个像素。
BI_RLE4也同样联合使用第二个字节中的值表示:
●第二个字节的值为0 行的结束
●第二个字节的值为1 图像结束
●第二个字节的值为2 其后的两个字节表示下一个像素从当前开始的水平和垂直位
置的偏移量
(3)彩色表:包含的元素与位图所具有的颜色数相同,像素的颜色用RGBQUAD结构来定义。彩色表中的颜色按颜色的重要性排序,这可辅助显示驱动程序为不能显示足够多颜