zoukankan      html  css  js  c++  java
  • 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/

    享受HelloWorld带来的思考盛宴
  • 相关阅读:
    hdu 2647 (拓扑)
    iOS 陀螺仪
    GetMessage()函数使用时的注意
    Button按钮释放时的事件
    深入理解递归:全排列问题
    json实现jsp分页
    EJB事务管理bug修改记
    hdu1159Common Subsequence
    HDOJ 4512 吉哥系列故事——完美队形I
    随机生成长度为100的数组,数组元素为1到10,统计出现次数最多和最少的元素
  • 原文地址:https://www.cnblogs.com/colin-chan/p/4243034.html
Copyright © 2011-2022 走看看