BMP文件的结构

BMP文件的结构

 

简介

BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理软件都支持BMP图象文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。Windows 3.0以前的BMP图文件格式与显示设备有关,因此把这种BMP图象文件格式称为设备相关位图DDB(device-dependent bitmap)文件格式。Windows 3.0以后的BMP图象文件与显示设备无关,因此把这种BMP图象文件格式称为设备无关位图DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系统中仍然存在DDB位图,象BitBlt()这种函数就是基于DDB位图的,只不过如果你想将图像以BMP格式保存到磁盘文件中时,微软极力推荐你以DIB格式保存),目的是为了让Windows能够在任何类型的显示设备上显示所存储的图象。BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB.RLE作扩展名)。

 

文件结构

位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和位图数据(bitmap-data

。具体情况如下表所示。

 

 

偏移量

域的名称

大小(单位:字节)

内容

  位图文件

 

0000h

文件标识

2

位图类别,根据不同的操作系统而不同,在Windows中,此字段的值总为‘BM’

0002h

File Size

4

以字节为单位表示的整个文件的大小

0006h

Reserved

4

保留,必须设置为0

000Ah

Bitmap Data Offset

4

从文件开始到位图数据开始之间的数据(bitmap data)之间的偏移量

 

 

 

 

 

 

 


位图

信息

 

 

 

 

 

 

 

 

000Eh

Bitmap Info Header Size

4

位图信息头(Bitmap Info Header)的长度。根据不同的操作系统而不同,在Windows中,长度值总为28h字节=40字节

0012h

Width

4

位图的宽度,以象素为单位

0016h

Height

4

位图的高度,以象素为单位

001Ah

Planes

2

位图的位面数(注:该值将总是1

001Ch

Bits Per Pixel

2

BMP图像的色深,即一个像素用多少位表示。

1 - 单色位图(实际上可有两种颜色,缺省情况下是黑色和白色。你可以自己定义这两种颜色。)

4 - 16 色位图

8 - 256 色位图

16 - 16bit 高彩色位图

24 - 24bit 真彩色位图

32 - 32bit 增强型真彩色位图

001Eh

Compression

4

压缩说明:

0 - 不压缩

1 - 使用8RLE压缩方式

2 - 使用4RLE压缩方式

3 - 表示每个像素值由指定的掩码决定

0022h

Bitmap Data Size

4

位图数据(bitmap data)的大小(以字节为单位),必须是4的倍数。当位像数据大小不是4的倍数时,用0填充补足。

0026h

HResolution

4

(象素/)为单位表示水平分辨率

002Ah

VResolution

4

(象素/)为单位表示垂直分辨率

002Eh

Colors

4

BMP图像使用的颜色数。0表示使用全部颜色。对于256色位图来说,此值为100h=256

0032h

Important Colors

4

重要的颜色数,此值为0时所有颜色都重要。对于使用调色板的BMP图像来说,当显卡不能够显示所有颜色时,此值将辅助驱动程序显示颜色。

调色板数据

0036h

Palette

N * 4 bytes

调色板规范。对于调色板中的每个表项,这4个字节用下述方法来描述RGB的值:

1字节用于蓝色分量

1字节用于绿色分量

1字节用于红色分量

1字节用于保留,总为0

说明:调色板是单色、16色和256色图像文件所特有的,相对应的调色板大小是216256

位图数据

根据调色板大小的不同而不同

Bitmap Data

xxx bytes

 

该数必须是4的倍数。

该域的大小取决于压缩方法及图像的尺寸和图像的位深度,它包含所有的位图数据字节。这些数据可能是彩色调色板的索引号,也可能是实际的RGB值,这将根据图像信息头中的位深度值来决定。

该域的必须是4的倍数。当位像数据大小不是4的倍数时,用0填充补足。

位图文件结构解析

 

调色板(color table

调色板(color table)是单色、16色和256色图像文件所特有的,相对应的调色板大小是216256。调色板以4字节为单位,每4个字节存放一个颜色值。对于使用了调色板的bmp,位图数据是指向调色板的索引。

可以将调色板想象成一个数组,每个数组元素的大小为4字节,假设有一256色的BMP图像的调色板数据为:

调色板[0]=黑、调色板[1]=白、调色板[2]=红、调色板[3]=调色板[255]=

 

则位图数据01 00 02 FF表示调用调色板[1]、调色板[0]、调色板[2]和调色板[255]中的数据来显示图像颜色。

在早期的计算机中,显卡相对比较落后,不一定能保证显示所有颜色,所以在调色板中的颜色数据应尽可能将图像中主要的颜色按顺序排列在前面,位图信息头的Important Colors域就用来说明了有多少种颜色是重要的。

调色板中的每种颜色用4字节表示,前三个字节分别对应蓝色值、绿色值和红色值,最后一个字节保留,总为0。如下表所示:

字节

   

1个字节

蓝色值

2个字节

绿色值

3个字节

红色值

4个字节

保留,总为0

                        调色板中的每种颜色对应的四个字节

 

位图数据(bitmap-data

如果图像是单色、16色和256色,则紧跟着调色板的是位图数据,位图数据是指向调色板的索引序号。

如果位图是16位、24位和32位色,则图像文件中不保留调色板,即不存在调色板,图像的颜色直接在位图数据中给出。

16位图像使用2字节保存颜色值,常见有两种格式:5位红5位绿5位蓝和5位红6位绿5位蓝,即555格式和565格式。555格式只使用了15 位,最后一位保留,设为0

24位图像使用3字节保存颜色值,每一个字节代表一种颜色,按红、绿、蓝排列。

32位图像使用4字节保存颜色值,每一个字节代表一种颜色,除了原来的红、绿、蓝,还有Alpha通道,即透明色。

如果图像带有调色板,则位图数据可以根据需要选择压缩与不压缩,如果选择压缩,则根据BMP图像是16色或256色,采用RLE4RLE8压缩算法压缩。RLE4是压缩16色图像数据的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BMP(Bitmap)是一种图像文件格式,其文件结构如下: 1. 文件头(14字节) ``` 偏移量 大小(字节) 说明 0 2 文件类型,BM表示Windows位图,BA表示OS/2位图 2 4 文件大小,以字节为单位 6 2 保留,必须设置为0 8 2 保留,必须设置为0 10 4 从文件头到位图数据之间的偏移量,以字节为单位 ``` 2. 位图信息头(40字节或更多) ``` 偏移量 大小(字节) 说明 14 4 位图信息头的大小,以字节为单位 18 4 位图的宽度,以像素为单位 22 4 位图的高度,以像素为单位 26 2 位图的位面数,总是为1 28 2 每个像素的位数,常见的有1、4、8、16、24和32位 30 4 压缩类型,0表示不压缩,1表示RLE8压缩,2表示RLE4压缩 34 4 位图数据的大小,以字节为单位 38 4 水平分辨率,每米像素数 42 4 垂直分辨率,每米像素数 46 4 位图使用的颜色数,如果该值为0,则颜色数为2的位数 50 4 重要颜色数,如果该值为0,则所有颜色都是重要的 54 4 调色板,如果位图的位数小于等于8,则存在调色板 ``` 3. 调色板(可选,大小为4 * 颜色数字节) ``` 偏移量 大小(字节) 说明 54 4 * 颜色数 调色板,每个颜色占4个字节,依次是蓝色分量、绿色分量、红色分量和保留值 ``` 4. 位图数据 ``` 偏移量 大小(字节) 说明 文件头中的偏移量 位图数据的大小,每个像素占据的字节数为位图信息头中的“每个像素的位数”除以8,不足4的倍数时需要进行补齐 ``` 在BMP文件中,像素数据存储的顺序为从左到右、从下到上,即先从左到右按行存储,再从下到上按列存储。这种存储方式也被称为“倒立式存储”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值