【发布时间】:2012-12-31 15:20:13
【问题描述】:
我有一个 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;
}
}
【问题讨论】:
-
颜色类型 = 3 表示索引颜色。 (OpenGL 应该)寻找包含 RGB 三元组列表的
PLTE块。 -
glTexImage2D函数在我绘制以纹理格式作为参数之一的图像时使用。我不明白如何读取 PLTE 块以获取 RGB 颜色然后设置纹理格式? -
PLTE 块只是一个字节列表
R,G,B,R,G,B,...直到块结束。 -
谢谢,现在我可以从调色板中读取 rgb 值了。但问题是它的红色 = f,绿色 = f,蓝色 = f。如何将其转换为纹理格式?
标签: c++ opengl png textures libpng