2015-03-25 46 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