位图初级(一)——位图的存储

来源:互联网 发布:一知f君张碧晨 编辑:程序博客网 时间:2024/06/11 02:10

这是N年前给媳妇做bitmap相关的解析软件时,学习bitmap格式的内容。之前发表于我的好网博客,现在把它转移到新地方来

    位图应该以一种既定的格式存储在文件中,并被赋予一个以.bmp扩展名结尾的文件名。这个既定的格式依次由下面几种结构组成:BITMAPFILEHEADER结构,BITMAPINFOHEADER结构,BITMAPV4HEADER或者BITMAPV5HEADER 结构。一个包含RGBQUAD结构(也叫调色板)的数组跟随在位图信息头结构之后。调色板之后跟随着一个颜色索引的数组(真实的位图数据)。

    位图文件的格式如下图所示:
  
    BITMAPFILEHEADER结构的成员确定文件;以byte为单位,声明文件大小;声明从文件头到文图数据的偏移量。BITMAPINFOHEADER,BITMAPV4HEADER,或者BITMAPV5HEADER结构的成员以像素为单位声明位图的宽和高;色彩格式(平面数目和每像素位数);位图存储之前是否被压缩和使用的压缩格式;位图数据使用的字节数;位图的分辨率;以及位图的颜色数。RGBQUAD结构声明了在调色板中RGB三色的亮度值。
    色彩索引数组(color-index array)与一个颜色关联,以索引的形式指向一个RGBQUAD结构,每一个像素一一对应一个色彩索引数组。这样,色彩索引数组所需要的位数,就等于像素数乘以索引需要的位数。举个例子,一个8*8的黑白位图,它的色彩索引数组一共需要8*8*1=64位,因为索引位需要1bit来索引这两个颜色。
    要创建一个自上而下位图的色彩索引数组,从位图的最顶行开始。最左边像素的RGBQUAD索引是色彩索引数组的前N位(N是指示所有RGBQUAD结构所需要的位数)。往右的下一个色彩索引就是数组中下一个N位,以后也是。(The index of the RGBQUAD for the color of the left-most pixel is the first n bits in the color-index array (where n is the number of bits needed to indicate all of the RGBQUAD structures). The color of the next pixel to the right is the next n bits in the array, and so forth.)当到达最右边的点,再从下一行最左边的点开始。如此重复,直到整个位图完成。如果是一个自下而上的位图,从最下面的行开始,还是从左到右,一直重复到位图的最顶行。
    下面的十六进制输出,表示了一个位图:

0000    42 4d 76 02 00 00 00 00  00 00 76 00 00 00 28 00 
0010    00 00 20 00 00 00 20 00  00 00 01 00 04 00 00 00 
0020    00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 
0030    00 00 00 00 00 00 00 00  00 00 00 00 80 00 00 80 
0040    00 00 00 80 80 00 80 00  00 00 80 00 80 00 80 80 
0050    00 00 80 80 80 00 c0 c0  c0 00 00 00 ff 00 00 ff 
0060    00 00 00 ff ff 00 ff 00  00 00 ff 00 ff 00 ff ff 
0070    00 00 ff ff ff 00 00 00  00 00 00 00 00 00 00 00 
0080    00 00 00 00 00 00 00 00  00 00 00 00 00 00 09 00 
0090    00 00 00 00 00 00 11 11  01 19 11 01 10 10 09 09 
00a0    01 09 11 11 01 90 11 01  19 09 09 91 11 10 09 11 
00b0    09 11 19 10 90 11 19 01  19 19 10 10 11 10 09 01 
00c0    91 10 91 09 10 10 90 99  11 11 11 11 19 00 09 01 
00d0    91 01 01 19 00 99 11 10  11 91 99 11 09 90 09 91 
00e0    01 11 11 11 91 10 09 19  01 00 11 90 91 10 09 01 
00f0    11 99 10 01 11 11 91 11  11 19 10 11 99 10 09 10 
0100    01 11 11 11 19 10 11 09  09 10 19 10 10 10 09 01 
0110    11 19 00 01 10 19 10 11  11 01 99 01 11 90 09 19 
0120    11 91 11 91 01 11 19 10  99 00 01 19 09 10 09 19 
0130    10 91 11 01 11 11 91 01  91 19 11 00 99 90 09 01 
0140    01 99 19 01 91 10 19 91  91 09 11 99 11 10 09 91 
0150    11 10 11 91 99 10 90 11  01 11 11 19 11 90 09 11 
0160    00 19 10 11 01 11 99 99  99 99 99 99 99 99 09 99 
0170    99 99 99 99 99 99 00 00  00 00 00 00 00 00 00 00 
0180    00 00 00 00 00 00 90 00  00 00 00 00 00 00 00 00 
0190    00 00 00 00 00 00 99 11  11 11 19 10 19 19 11 09 
01a0    10 90 91 90 91 00 91 19  19 09 01 10 09 01 11 11 
01b0    91 11 11 11 10 00 91 11  01 19 10 11 10 01 01 11 
01c0    90 11 11 11 91 00 99 09  19 10 11 90 09 90 91 01 
01d0    19 09 91 11 01 00 90 10  19 11 00 11 11 00 10 11 
01e0    01 10 11 19 11 00 90 19  10 91 01 90 19 99 00 11 
01f0    91 01 11 01 91 00 99 09  09 01 10 11 91 01 10 91 
0200    99 11 10 90 91 00 91 11  00 10 11 01 10 19 19 09 
0210    10 00 99 01 01 00 91 01  19 91 19 91 11 09 10 11 
0220    00 91 00 10 90 00 99 01  11 10 09 10 10 19 09 01 
0230    91 90 11 09 11 00 90 99  11 11 11 90 19 01 19 01 
0240    91 01 01 19 09 00 91 10  11 91 99 09 09 90 11 91 
0250    01 19 11 11 91 00 91 19  01 00 11 00 91 10 11 01 
0260    11 11 10 01 11 00 99 99  99 99 99 99 99 99 99 99 
0270    99 99 99 99 99 90

   下面的表给出了这个位图中的结构的数据:
     

0 0
原创粉丝点击