PNG图像纹理格式的颜色类型3

PNG image texture format for color type 3

本文关键字:颜色 类型 格式 图像 纹理 PNG      更新时间:2023-10-16

我有一个128x128尺寸的PNG图像。当我用libpng读取它的IHDR块时,它显示图像的颜色类型为3。问题是我找不到任何地方应该是这种颜色类型的纹理格式。我想用OpenGL绘制这个图像。但如果没有正确的纹理格式,图像的颜色就不应该是什么样子。另外,如果能提供任何参考资料,我可以阅读有关此事的详细信息,我将不胜感激。

我使用这个方法为其他颜色类型设置纹理格式

inline void GetPNGtextureInfo (int color_type,GLuint *format)
{
switch (color_type)
{
    case PNG_COLOR_TYPE_GRAY:
        *format = GL_LUMINANCE;
        break;
    case PNG_COLOR_TYPE_GRAY_ALPHA:
        *format = GL_LUMINANCE_ALPHA;
        break;
    case PNG_COLOR_TYPE_RGB:
        *format = GL_RGB;
        break;
    case PNG_COLOR_TYPE_RGB_ALPHA:
        *format = GL_RGBA;
        break;
    default:
        break;
  }
}

调色板只是一个颜色数组,而图像数据只是该数组的索引。

所以如果你想把你的图像转换为RGB图像,分配一个足够大的新缓冲区,以这种格式的图像,并通过从源图像中获取像素的索引来填充它,用该值索引调色板,并将你得到的RGB值存储到目标图像中。

你可能会发现GL支持调色板纹理,并且可以直接加载它们,但是硬件支持现在不太常见,而且你所做的一切都是将工作卸载给驱动程序,这将把你的纹理转换为24位。

例如,OpenGL ES通过glCompressedTexImage2D()函数支持某些类型的调色板纹理,但这完全有可能会给实现带来负担,将这些纹理转换为硬件可以处理的东西。

除非您有存储空间问题,否则我倾向于离线转换(即首先将图像保存为24位),但这在技术上并不困难。