首先解釋一下掃描行的概念:掃描行指映像在儲存空間中一行像素的位元組資料。現在我們來討論電腦中的映像資料存放區情況。
映像資料位元組陣列,一般都是正向的,掃描行由底向上進行儲存,也就是說,陣列中最開始的位元組表示映像的左下角。當然還有一類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。