PNG图像纹理格式的颜色类型3
PNG image texture format for color type 3
我有一个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位),但这在技术上并不困难。
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- Eclipse Neon.3 更改类型层次结构/调用层次结构中的颜色
- 将RGB颜色图像转换为OpenCV C 中的索引颜色图像类型
- 自由图像报告图像颜色类型错误
- 不同类型气候条件的颜色编码背景
- PNG图像纹理格式的颜色类型3