libpng获得原始颜色通道深度

时间:2016-05-11 09:55:17

标签: c++ opengl-es opengl-es-2.0 libpng

我有PNG文件,它们都有RGBA格式。不同之处在于其中一些是RGBA8888,其中一些是RGBA4444。经过一些挖掘,似乎如果PNG中的像素格式是RGBA4444,libpng会自动将其转换为RGBA8888。手册说如果像素格式是RGBA,则深度只有8位。

 PNG_COLOR_TYPE_GRAY
    (bit depths 1, 2, 4, 8, 16)
 PNG_COLOR_TYPE_GRAY_ALPHA
    (bit depths 8, 16)
 PNG_COLOR_TYPE_PALETTE
    (bit depths 1, 2, 4, 8)
 PNG_COLOR_TYPE_RGB
    (bit_depths 8, 16)
 PNG_COLOR_TYPE_RGB_ALPHA
    (bit_depths 8, 16)

有没有办法检索文件中定义的原始位深度?我需要能够告诉哪个图像具有哪个通道深度,以便我可以使用不同的格式将它们加载到OpenGL中。

1 个答案:

答案 0 :(得分:0)

使用libpng的png_get_IHDR()或png_get_bit_depth()查找图像的深度(位/样本)和png_get_color_type()以找出颜色类型。对于RGBA8888图像,这些将返回bit_depth = 8和color_type = 6(RGBA)。

没有RGBA4444 PNG格式。但是,PNG可以以PALETTE格式存储真彩色与alpha图像,将4位索引存储到RGB颜色的调色板中,其中alpha通道在tRNS块中携带,或者,如您所见,以RGBA8888形式存储。使用上面提到的libpng函数,或使用任何工具查看PNG文件开头附近的IHDR块的内容,以找出位深度和颜色类型。