png的格式及像素存儲分析


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

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

PLTE塊格式為:


     循環
          

         RED:    1byte
          

         GREEN:1byte
          

         BLUE:  1byte
     

     END

tRNS塊布爾透明格式為:


       循環
          

            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^(常有8、16、32)或有透明通道的4*2^(常有8、16、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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM