yzjcomcn

          統(tǒng)計(jì)

          留言簿

          閱讀排行榜

          評論排行榜

          png圖片格式分析

                                                                       Png 格式分析

             現(xiàn)在j2me中能夠用到的圖片格式一般是png。在游戲開發(fā)中,為了得到更好的效果,我們需要對png格式的圖片進(jìn)行處理。下面我就png格式圖片結(jié)構(gòu)進(jìn)行分析。

             Png圖片結(jié)構(gòu)

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

          數(shù)據(jù)塊符號

          數(shù)據(jù)塊名稱

          多數(shù)據(jù)塊

          可選否

          位置限制

          IHDR

          文件頭數(shù)據(jù)塊

          第一塊

          cHRM

          基色和白色點(diǎn)數(shù)據(jù)塊

          PLTEIDAT之前

          gAMA

          圖像γ數(shù)據(jù)塊

          PLTEIDAT之前

          sBIT

          樣本有效位數(shù)據(jù)塊

          PLTEIDAT之前

          PLTE

          調(diào)色板數(shù)據(jù)塊

          IDAT之前

          bKGD

          背景顏色數(shù)據(jù)塊

          PLTE之后IDAT之前

          hIST

          圖像直方圖數(shù)據(jù)塊

          PLTE之后IDAT之前

          tRNS

          圖像透明數(shù)據(jù)塊

          PLTE之后IDAT之前

          oFFs

          (專用公共數(shù)據(jù)塊)

          IDAT之前

          pHYs

          物理像素尺寸數(shù)據(jù)塊

          IDAT之前

          sCAL

          (專用公共數(shù)據(jù)塊)

          IDAT之前

          IDAT

          圖像數(shù)據(jù)塊

          與其他IDAT連續(xù)

          tIME

          圖像最后修改時(shí)間數(shù)據(jù)塊

          無限制

          tEXt

          文本信息數(shù)據(jù)塊

          無限制

          zTXt

          壓縮文本數(shù)據(jù)塊

          無限制

          fRAc

          (專用公共數(shù)據(jù)塊)

          無限制

          gIFg

          (專用公共數(shù)據(jù)塊)

          無限制

          gIFt

          (專用公共數(shù)據(jù)塊)

          無限制

          gIFx

          (專用公共數(shù)據(jù)塊)

          無限制

          IEND

          圖像結(jié)束數(shù)據(jù)

          最后一個(gè)數(shù)據(jù)塊

          Png圖片數(shù)據(jù)塊列表

               Png格式是由四個(gè)關(guān)鍵數(shù)據(jù)塊和一些輔助數(shù)據(jù)塊組成,四個(gè)關(guān)鍵數(shù)據(jù)塊是必需的。有了它們就可以組成一張png圖片,這四個(gè)關(guān)鍵數(shù)據(jù)塊就是:

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

          每個(gè)png圖片的數(shù)據(jù)塊的結(jié)構(gòu)都是一樣的。結(jié)構(gòu)圖如下:

          名稱

          字節(jié)數(shù)

          說明

          Length (長度)

          4字節(jié)

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

          Chunk Type Code (數(shù)據(jù)塊類型碼)

          4字節(jié)

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

          Chunk Data (數(shù)據(jù)塊數(shù)據(jù))

          可變長度

          存儲按照Chunk Type Code指定的數(shù)據(jù)

          CRC (循環(huán)冗余檢測)

          4字節(jié)

          存儲用來檢測是否有錯(cuò)誤的循環(huán)冗余碼

           

          CRC域中的值是對Chunk Type Code域和Chunk Data域中的數(shù)據(jù)進(jìn)行計(jì)算得到的。

          每個(gè)數(shù)據(jù)塊都是由這些數(shù)據(jù)域組成的。

          IHDR

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

          對于一個(gè)PNG文件來說,png圖片的標(biāo)志位:

          十進(jìn)制數(shù)

          137 80 78 71 13 10 26 10

          十六進(jìn)制數(shù)

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

          文件頭數(shù)據(jù)塊由13字節(jié)組成,它的格式如下表所示。

          域的名稱

          字節(jié)數(shù)

          說明

          Width

          4 bytes

          圖像寬度,以像素為單位

          Height

          4 bytes

          圖像高度,以像素為單位

          Bit depth

          1 byte

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

          ColorType

          1 byte

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

          Compression method

          1 byte

          壓縮方法(LZ77派生算法)

          Filter method

          1 byte

          濾波器方法

          Interlace method

          1 byte

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

           

          PLTE

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

          顏色

          字節(jié)

          意義

          Red

          1 byte

          0 = 黑色, 255 =

          Green

          1 byte

          0 = 黑色, 255 = 綠色

          Blue

          1 byte

          0 = 黑色, 255 = 藍(lán)色

          因此,調(diào)色板的長度應(yīng)該是3的倍數(shù)。

          并不是所有的png格式的圖片都有調(diào)色板數(shù)據(jù)塊,真彩色圖片可能就沒有。

          IDAT

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

          IDAT存放著圖像真正的數(shù)據(jù)信息,因此,如果能夠了解IDAT的結(jié)構(gòu),我們就可以很方便的生成PNG圖像。

          IEND

          圖像結(jié)束數(shù)據(jù)IEND(image trailer chunk):它用來標(biāo)記PNG文件或者數(shù)據(jù)流已經(jīng)結(jié)束,并且必須要放在文件的尾部。

          如果我們仔細(xì)觀察PNG文件,我們會發(fā)現(xiàn),文件的結(jié)尾12個(gè)字符看起來總應(yīng)該是這樣的:

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

          不難明白,由于數(shù)據(jù)塊結(jié)構(gòu)的定義,IEND數(shù)據(jù)塊的長度總是000 00 00 00,除非人為加入信息),數(shù)據(jù)標(biāo)識總是IEND49 45 4E 44),因此,CRC碼也總是AE 42 60 82

          上面是png格式圖片的四個(gè)關(guān)鍵數(shù)據(jù)塊, 暫時(shí)分析到這。

           

           

           

           

           

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

          評論

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



          經(jīng)典  回復(fù)  更多評論   

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

          非常感謝呀!  回復(fù)  更多評論   

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

          有沒有后續(xù)呢?我現(xiàn)在要做一個(gè)程序,把四個(gè)png圖片合并成一個(gè)  回復(fù)  更多評論   

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

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


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 资兴市| 正镶白旗| 利川市| 习水县| 西安市| 麟游县| 朝阳市| 渝中区| 泗水县| 申扎县| 金门县| 淳化县| 鹿泉市| 和龙市| 福建省| 厦门市| 阿坝县| 惠东县| 长葛市| 焦作市| 泗水县| 广丰县| 金门县| 泗洪县| 天津市| 英吉沙县| 定南县| 淮南市| 秦皇岛市| 曲靖市| 瑞金市| 新营市| 连平县| 东乌珠穆沁旗| 邵武市| 个旧市| 东明县| 岐山县| 科技| 南靖县| 文登市|