libpng获取原始颜色通道深度

libpng getting original color channel depth

本文关键字:通道 深度 颜色 原始 获取 libpng      更新时间:2023-10-16

我有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中。

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

没有RGBA4444 PNG格式。然而,PNG可以以PALETTE形式存储带有阿尔法图像的truecolor,将4位索引存储到RGB颜色的调色板中,阿尔法通道包含在tRNS块中,或者如您所观察到的,以RGBA8888形式存储。使用上面提到的libpng函数,或者使用任何工具查看PNG文件开头附近的IHDR块的内容,以了解位深度和颜色类型。