当前位置:文档之家› 24位位图解析

24位位图解析

我所要介绍的是24位真彩色位图文件的结构。

一个24位真彩色位图文件包括以下三个部分:位图文件头、位图信息头和颜色数据域,这都是我自己起的名字,不知是否与经典有出入,大家应该能够意会。

首先说说位图文件头。

就目前来看我所见到过的位图文件头都位于位图文件的最前部,长都是14个字节,例如有这样一个位图文件(用16位编辑器打开浏览时的效果):
那么在第0行从左向右的前14个字节(红色部分)属于位图文件头,各个字节的意义是这样的:
42 4D:看作ASCII码,对应的字母为‘BM’,即表示该文件是位图文件;
86 00 00 00:四个字节用于表示改为图文件的大小尺寸,要注意的是它们是按低位到高位排列的,那么可以看出整个位图文件的尺寸是0x00000086字节,即134字节。

不难得知,这四个字节最大可以表示4,294,967,296,即可以表示4GB的位图大小;
00 00 00 00:查资料知道,这4个字节是保留位,用于存储文件大小的数据。

而我没有找到超过4G的位图,因此不知道这四个自己究竟如何使用。

不过可以推测可能是用跟前面4字节共64 bit来表示文件的大小。

FAT32文件系统下不支持超过4GB的文件,NTFS系统支持;
36 00 00 00:也是按从低位到高位排列的,用于表示改位图颜色数据域相对文件开始处的偏移量,可以看到这个位图的颜色数据域是从0x00000036字节处开始的(这里有点想不通,既然前面要用8个字节表示文件大小,为什么这里的偏移量只有4字节?)。

以上就是位图文件头的情况,接下来是位图信息头,仍旧观察前面的位图,从第一行E序字节的28开始(蓝色部分)共40字节,各个字节的含义是:
28 00 00 00:表示信息头的长度,0x00000028=40,即位图信息头占40个字节;
05 00 00 00:表示位图宽度,单位为像素。

即位图的宽度为5个像素;
05 00 00 00:表示位图高度,单位为像素。

即位图的高度为5个像素;
01 00:表示位图设备级别;
18 00:位图级别,0x0018=24,即24位真彩色;
00 00 00 00:表示压缩类型,为零表示不压缩;
50 00 00 00:用于表示颜色数据区的实际长度,16进制,单位为字节,这里是80字节;
00 00 00 00:表示水平分辨率,具体什么意思还不清楚;
00 00 00 00:表示垂直分辨率;
C4 0E 00 00:表示位图实际使用的颜色表中的颜色变址数。

C4 0E 00 00:表示位图显示过程中被认为重要颜色变址数。

最后是颜色数据域。

有一点要说明,颜色数据区中每一行的数据长度必须是4的整数倍,为了做到这一点,颜色数据区每一行都可能需要进行补齐。

例如上述图片宽5像素,高5像素,而每个像素占3个字节,这样似乎颜色数据区应该为5*5*3=75字节,但是文件信息头中记录的却是80字节,实际上多出的5个字节被分到了每一行用于补齐。

还有一个尝试要提醒大家:位图颜色数据域是从位图的最后一行的最左端开始记录颜色信息的,而不是通常认为的位图第一行最左端。

此外,色光三原色的记录顺序在文件中是蓝、绿、红。

总的来说,观察上面的文件情况,可以看出文件的第一行为黑色,行末补了一个全零字节,第二行为白色,第三行为红色,第四行为绿色,第五行为蓝色,每一行的末尾都用一个全零字节补齐(不知道是否一定要补全零字节,我尝试胡乱修改补齐字节之后并未发现影响图片显示的情况)。

相关主题