前言
我們都知道,在進行J2ME的手機應用程序開發的時候,在圖片的使用上,我們可以使用PNG格式的圖片(甚至于在有的手機上,我們只可以使用PNG格式的圖片),盡管使用圖片可以為我們的應用程序增加不少亮點,然而,只支持PNG格式的圖片卻又限制了我們進一步發揮的可能性(其實,應該說是由于手機平臺上的處理能力有限)。 在MIDP2中,或者某些廠商(如NOKIA)提供的API中,提供了drawPixels/getPixels的方法,這些方法進一步提高了開發者處理圖片的靈活性,然而,在MIDP2還未完全普及的今天,我們需要在MIDP1 .0中實現這類方法還屬于異想天開,因此,為了實現更高級的應用,我們必須充分挖掘PNG的潛力。
PNG的文件結構
對于一個PNG文件來說,其文件頭總是由位固定的字節來描述的:
十進制數137 80 78 71 13 10 26 10十六進制數89 50 4E 47 0D 0A 1A 0A其中第一個字節0x89超出了ASCII字符的范圍,這是為了避免某些軟件將PNG文件當做文本文件來處理。文件中剩余的部分由3個以上的PNG的數據塊(Chunk)按照特定的順序組成,因此,一個標準的PNG文件結構應該如下:
PNG文件標志PNG數據塊……PNG數據塊PNG數據塊(Chunk)
PNG定義了兩種類型的數據塊,一種是稱為要害數據塊(critical chunk),這是標準的數據塊,另一種叫做輔助數據塊(ancillary chunks),這是可選的數據塊。要害數據塊定義了4個標準數據塊,每個PNG文件都必須包含它們,PNG讀寫軟件也都必須要支持這些數據塊。雖然PNG文件規范沒有要求PNG編譯碼器對可選數據塊進行編碼和譯碼,但規范提倡支持可選數據塊。
下表就是PNG中數據塊的類別,其中,要害數據塊部分我們使用深色背景加以區分。
為了簡單起見,我們假設在我們使用的PNG文件中,這4個數據塊按以上先后順序進行存儲,并且都只出現一次。
數據塊結構
PNG文件中,每個數據塊由4個部分組成,如下:
名稱 字節數 說明 Length (長度) 4字節 指定數據塊中數據域的長度,其長度不超過(231-1)字節 Chunk Type Code (數據塊類型碼) 4字節 數據塊類型碼由ASCII字母(A-Z和a-z)組成 Chunk Data (數據塊數據) 可變長度 存儲按照Chunk Type Code指定的數據 CRC (循環冗余檢測) 4字節 存儲用來檢測是否有錯誤的循環冗余碼CRC(cyclic redundancy check)域中的值是對Chunk Type Code域和Chunk Data域中的數據進行計算得到的。CRC具體算法定義在ISO 3309和ITU-T V.42中,其值按下面的CRC碼生成多項式進行計算:
x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
新聞熱點
疑難解答