BMP圖像格式的補充
2024-06-09 18:00:17
供稿:網友
首先解釋一下掃描行的概念:掃描行指圖像在存儲器中一行像素的字節數據?,F在我們來討論計算機中的圖像數據存儲情況。
圖像數據字節陣列,一般都是正向的,掃描行由底向上進行存儲,也就是說,陣列中最開始的字節表示圖像的左下角。當然還有一類BMP是倒向的,在Potoshop7.0中另存BMP時有翻轉行序的選項,這樣的BMP,掃描行由頂向下進行存儲,也就是說,陣列中最開始的字節表示圖像的左上角。一般的,都是用的正向的BMP。
圖像掃描行的大小,取決于圖象的顏色數目和用象素表示的圖象寬度。
BMP格式還有個非常重要的規定:要求每一掃描行的字節數據必須能被4整除,也就是DWord對齊(Dword是一種數據類型,長度為4個字節)。如果圖像的一行字節數不能被4整除,就需要在每行的未尾補齊0以達到規定。
設圖像位數為N,圖像寬為W(以像素數表示),高為H(以像素數表示),掃描行字節數為L,現在我們來看一下圖像的一些情況。
1、圖像的顏色數=2的N次方。圖像位數指像素用二進制數表示時的位數。16位圖像的顏色數為2的16次方=65536,這就是我們常說的6萬色了。
2、一個字節是8位,這樣每個像素所需字節數=N/8。
3、圖像每行的字節數=W*N/8
4、圖像每一掃描行的字節數L要求必須能被4整除。
當W*N/8能被4整除時,L=W*N/8;
當W*N/8不能被4整除時,需要在每行數據補零字節數為4-(W*N/8) Mod 4(Mod是求余運算,X mod Y指X除以Y的余數),這樣L=W*N/8+4-(W*N/8) Mod 4。
5、圖像數據陣列的字節大小=L*H
6、圖像文件的大小,如果是用photoshop保存的圖像,除了文件頭及數據陣列之外,還要加上未尾兩個字節的0。文件頭的大小,24位圖為36h=54,16位r5g6b5圖為46h=70,8位為436h=1078。
例如:一幅16位r5g6b5的圖像,N=16,若W=13,H=11,W*N/8=26不能被4整除,需要在每行數據后補零字節數4-26 Mod 4=2,在HW也就是每26個字節要補上0000。L=W*N/8+2=28。圖像數據陣列字節大小=L*H=28*11=308,圖像文件大小=308+70+2=380。
T4/T5中的圖像數據是16位r5g6b5格式的,但是不同于計算機中的r5g6b5,它并不要求掃描行能被4整除,所以不存在補零的問題。對r5grb6,由于W*N/8=W*16/8=W*2,所以當圖像寬W為奇數時,如果把這樣的r5g6b5往手機AXF中替換,必須把其中補的零去掉。
對于T4/T5,其中的圖像數據陣列大小直接就等于L*H=W*N/8*H=W*H*2。
除了上述提到到的BMP格式,還有別的很多格式,有不同的講究,尤其是8位BMP,還有個調色板的的問題。呵呵呵,希望大家看了不要發暈,我已經快暈了~~~~