BMP映像格式的補充

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.