2015-03-25 89 views
0

我想了解如何在位图文件头中编码图像大小。 wikipedia page仅显示小于255个字节的图像示例,因此大小编码在一个字节中,后跟三个0字节。BMP文件大小编码

问题是,当我测试出更大的图像时,我无法将编码字节与真实大小关联起来。

$ identify bmp1.bmp 
bmp1.bmp BMP3 10x10 10x10+0+0 1-bit sRGB 2c 102B 0.000u 0:00.000 
$ identify bmp2.bmp 
bmp2.bmp BMP3 92x76 92x76+0+0 1-bit sRGB 2c 974B 0.000u 0:00.000 
In [28]: [ord(c) for c in bmp1[2:6]] 
Out[28]: [102, 0, 0, 0] 

In [29]: len(bmp1) 
Out[29]: 102 

In [30]: [ord(c) for c in bmp2[2:6]] 
Out[30]: [206, 3, 0, 0] 

In [31]: len(bmp2) 
Out[31]: 974 

正如你可以看到,第一图像具有102个字节,并且文件头包含编码的大小102。但第二个图像有974字节,文件头包含字节206和3.这是因为文件头大小不可靠,我不应该尝试从这些字节读取大小?否则,你如何计算206和3的974?

回答

1

这是endianness的问题。 BMP uses little-endian encoding,所以至少显著字节先读:

102 =(102 * 256 )+(0 * 256 )+(0 * 256 )+(0 * 256 )

= 102

974 =(206 * 256 0 )+(3 * 256 )+(0 * 256 )+(0 * 256 )

= 206 +(3 * 256)

+0

谢谢主席先生,完美的答案:)时,我可以会接受的答案,在5分钟 – Fandekasp 2015-03-25 03:27:08