png的格式及像素存儲分析

從圖片的數據塊存儲方式來看png分兩種html

1.索引色模式存儲。png8的索引色透明就採起該種方式。該種方式是將顏色存在png的可選模塊調色板中,調色板的色彩存儲格式爲RGB(各1byte)。而圖片的數據塊裏的像素直接存儲調色板裏的索引值,根據索引尋找對應的顏色及透明色。透明色的指定由PLTE後的tRNS圖像透明數據塊指定。布爾透明和alpha透明的區別是alpha透明爲透明色附加了8位(1byte)的透明級別。tRNS圖像透明數據塊的長度與調色板對應以下。url

PLTE塊格式爲:
spa

     循環
          htm

         RED:    1byte
          blog

         GREEN:1byte
          索引

         BLUE:  1byte
     圖片

     ENDget

tRNS塊布爾透明格式爲:
it

       循環
          table

            if(對應調色盤顏色非透明)
               

                   0xFF:  1byte
          

            else
              

                   0x00:  1byte
     

       END


tRNS塊alpha透明格式爲:


       循環
          

            if(對應調色盤顏色非透明)
               

                   0xFF:  1byte
          

            else
              

                   0x**:  1byte
   (具體的透明級別共256級)  

       END


tRNS塊的循環長度爲調色盤的顏色數,至關於調色板顏色表的一個對應表,標識該顏色是否透明,0xFF(255)不透明,0x00(0)全透明。

2.真彩色存儲(非專業術語)。該類存儲不存在調色板(或者有調色板供非真彩色顯示程序用它來量化圖像數據,從而顯示該圖像。),在數據塊的像素裏直接存儲顏色信息。這裏就有常說的RGB_888(24bit)、RGB565(16bit)、RGBA_8888(32bit)、RGBA_4444(16bit)、RGBA5551(16bit)等等。png24及png32都是該類存儲。

從圖片的色彩位數來看經常使用如下幾種

1.png8。這個8理解爲位深,但這個位深可減小。存儲方式可爲索引色存儲。索引色位深可爲1,2,4,8。隨着位深的減小可支持的顏色也減小。可支持8位色彩共256(2的8次方)種顏色。

1.png16。這個8理解爲位深,存儲方式可爲RGB565(16bit)、RGBA_8888(32bit)、RGBA_4444(16bit)、RGBA5551(16bit)。但這個位深可減小。索引色位深可爲1,2,4,8。隨着位深的減小可支持的顏色也減小。可支持8位色彩共256(2的8次方)種顏色。

2.png24。24也理解爲位深,存儲方式爲RGB_888。可支持24位色彩共1600多萬(2的24次方)種顏色。

3.png32。32也理解爲位深,存儲方式爲RGB_888。實際上爲png24+8位的透明通道。一樣支持24位色彩共1600多萬(2的24次方)種顏色。

可是位深是不定的,以上僅僅列舉經常使用的幾種,還能夠是無透明通道的3*2^(常有八、1六、32)或有透明通道的4*2^(常有八、1六、32)。

那麼咱們使用libpng如何判斷png的格式。

/*獲取位深,顏色類型*/
channels = png_get_channels(png_ptr, info_ptr); /*獲取通道數*/
bit_depth = png_get_bit_depth(png_ptr, info_ptr); /* 獲取位深 */
color_type = png_get_color_type(png_ptr, info_ptr); /*顏色類型*/

根據這些咱們能夠由如下表格進行判斷

Bit depth 1 byte 圖像深度:   索引彩色圖像:1,2,4或8   灰度圖像:1,2,4,8或16   真彩色圖像:24或32或48
ColorType 1 byte 顏色類型:  0:灰度圖像   2:真彩色圖像   3:索引彩色圖像   4:帶α通道數據的灰度圖像   6:帶α通道數據的真彩色圖像

 

參考:

http://baike.baidu.com/link?url=FckD48sfXstBMBnODg40OJvyMGNsiEy1-4SbwE_TSN9WK1WFaIkyjVe5d7YeUlbwKaAe_4swGsSg21PFKzAoba

http://www.cnblogs.com/PeunZhang/archive/2013/05/30/3050394.html

http://blog.163.com/iwait2012@126/blog/static/16947232820124411174877/

相關文章
相關標籤/搜索