yzjcomcn

          統計

          留言簿

          閱讀排行榜

          評論排行榜

          png圖片格式分析

                                                                       Png 格式分析

             現在j2me中能夠用到的圖片格式一般是png。在游戲開發中,為了得到更好的效果,我們需要對png格式的圖片進行處理。下面我就png格式圖片結構進行分析。

             Png圖片結構

          Png格式的圖片一般由一些數據塊組成。列表如下:

          數據塊符號

          數據塊名稱

          多數據塊

          可選否

          位置限制

          IHDR

          文件頭數據塊

          第一塊

          cHRM

          基色和白色點數據塊

          PLTEIDAT之前

          gAMA

          圖像γ數據塊

          PLTEIDAT之前

          sBIT

          樣本有效位數據塊

          PLTEIDAT之前

          PLTE

          調色板數據塊

          IDAT之前

          bKGD

          背景顏色數據塊

          PLTE之后IDAT之前

          hIST

          圖像直方圖數據塊

          PLTE之后IDAT之前

          tRNS

          圖像透明數據塊

          PLTE之后IDAT之前

          oFFs

          (專用公共數據塊)

          IDAT之前

          pHYs

          物理像素尺寸數據塊

          IDAT之前

          sCAL

          (專用公共數據塊)

          IDAT之前

          IDAT

          圖像數據塊

          與其他IDAT連續

          tIME

          圖像最后修改時間數據塊

          無限制

          tEXt

          文本信息數據塊

          無限制

          zTXt

          壓縮文本數據塊

          無限制

          fRAc

          (專用公共數據塊)

          無限制

          gIFg

          (專用公共數據塊)

          無限制

          gIFt

          (專用公共數據塊)

          無限制

          gIFx

          (專用公共數據塊)

          無限制

          IEND

          圖像結束數據

          最后一個數據塊

          Png圖片數據塊列表

               Png格式是由四個關鍵數據塊和一些輔助數據塊組成,四個關鍵數據塊是必需的。有了它們就可以組成一張png圖片,這四個關鍵數據塊就是:

          文件頭數據塊(IHDR)、調色板數據塊(PLTE)、圖象數據塊(IDAT)、圖象結束數據塊(IEND)。為了使圖象的背景色透明,獲得更好的效果,我建議還要將tRNS這個數據塊加上。原來我在手機上就用四個關鍵數據塊合成一張圖片,放到手機上背景色不透明,效果不好,加上tRNS這個數據塊就背景色透明。

          每個png圖片的數據塊的結構都是一樣的。結構圖如下:

          名稱

          字節數

          說明

          Length (長度)

          4字節

          指定數據塊中數據域的長度,其長度不超過(2311)字節

          Chunk Type Code (數據塊類型碼)

          4字節

          數據塊類型碼由ASCII字母(A-Za-z)組成

          Chunk Data (數據塊數據)

          可變長度

          存儲按照Chunk Type Code指定的數據

          CRC (循環冗余檢測)

          4字節

          存儲用來檢測是否有錯誤的循環冗余碼

           

          CRC域中的值是對Chunk Type Code域和Chunk Data域中的數據進行計算得到的。

          每個數據塊都是由這些數據域組成的。

          IHDR

          文件頭數據塊IHDR(header chunk):它包含有PNG文件中存儲的圖像數據的基本信息,并要作為第一個數據塊出現在PNG數據流中,而且一個PNG數據流中只能有一個文件頭數據塊。

          對于一個PNG文件來說,png圖片的標志位:

          十進制數

          137 80 78 71 13 10 26 10

          十六進制數

          89 50 4E 47 0D 0A 1A 0A

          文件頭數據塊由13字節組成,它的格式如下表所示。

          域的名稱

          字節數

          說明

          Width

          4 bytes

          圖像寬度,以像素為單位

          Height

          4 bytes

          圖像高度,以像素為單位

          Bit depth

          1 byte

          圖像深度:
          索引彩色圖像:1248
          灰度圖像:124816
          真彩色圖像:816

          ColorType

          1 byte

          顏色類型:
          0
          :灰度圖像, 124816
          2
          :真彩色圖像,816
          3
          :索引彩色圖像,1248
          4
          :帶α通道數據的灰度圖像,816
          6
          :帶α通道數據的真彩色圖像,816

          Compression method

          1 byte

          壓縮方法(LZ77派生算法)

          Filter method

          1 byte

          濾波器方法

          Interlace method

          1 byte

          隔行掃描方法:
          0
          :非隔行掃描
          1
          Adam7(Adam M. Costello開發的7遍隔行掃描方法)

           

          PLTE

          調色板數據塊PLTE(palette chunk)包含有與索引彩色圖像(indexed-color image)相關的彩色變換數據,它僅與索引彩色圖像有關。PLTE數據塊是定義圖像的調色板信息,PLTE可以包含1~256個調色板信息,每一個調色板信息由3個字節組成:

          顏色

          字節

          意義

          Red

          1 byte

          0 = 黑色, 255 =

          Green

          1 byte

          0 = 黑色, 255 = 綠色

          Blue

          1 byte

          0 = 黑色, 255 = 藍色

          因此,調色板的長度應該是3的倍數。

          并不是所有的png格式的圖片都有調色板數據塊,真彩色圖片可能就沒有。

          IDAT

          圖像數據塊IDAT(image data chunk):它存儲實際的數據,在數據流中可包含多個連續順序的圖像數據塊。

          IDAT存放著圖像真正的數據信息,因此,如果能夠了解IDAT的結構,我們就可以很方便的生成PNG圖像。

          IEND

          圖像結束數據IEND(image trailer chunk):它用來標記PNG文件或者數據流已經結束,并且必須要放在文件的尾部。

          如果我們仔細觀察PNG文件,我們會發現,文件的結尾12個字符看起來總應該是這樣的:

          00 00 00 00 49 45 4E 44 AE 42 60 82

          不難明白,由于數據塊結構的定義,IEND數據塊的長度總是000 00 00 00,除非人為加入信息),數據標識總是IEND49 45 4E 44),因此,CRC碼也總是AE 42 60 82

          上面是png格式圖片的四個關鍵數據塊, 暫時分析到這。

           

           

           

           

           

          posted on 2005-05-04 22:33 古行客 閱讀(2675) 評論(4)  編輯  收藏

          評論

          # re: png圖片格式分析 2006-07-07 10:19 800電話防偽 漸變數碼 雙碼防偽防竄貨 128條碼 0551-5336491



          經典  回復  更多評論   

          # re: png圖片格式分析 2007-11-25 20:23 彼岸

          非常感謝呀!  回復  更多評論   

          # re: png圖片格式分析 2007-11-25 20:25 彼岸

          有沒有后續呢?我現在要做一個程序,把四個png圖片合并成一個  回復  更多評論   

          # 清晰明了 2012-03-31 10:30 Vency

          樓主寫的太正了!感謝分享。
          能對IDAT進一步分析一下嗎?或者有相關材料推薦?  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 普兰店市| 嘉祥县| 万年县| 光山县| 古丈县| 咸宁市| 山西省| 鹤山市| 丰镇市| 青岛市| 丹巴县| 应用必备| 两当县| 双辽市| 武陟县| 晋宁县| 石渠县| 三河市| 浙江省| 朔州市| 虞城县| 巴彦淖尔市| 晋城| 错那县| 昭平县| 老河口市| 惠东县| 通河县| 长治市| 治县。| 建昌县| 洱源县| 镇赉县| 青神县| 峡江县| 宜川县| 阳山县| 温泉县| 庄河市| 武陟县| 深圳市|