gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:00:23 25 4
gpt4 key购买 nike

我有一张 128x128 尺寸的 PNG 图片。当我用 libpng 读取它的 IHDR block 时,它显示图像的颜色类型为 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 位),但无论哪种方式在技术上都不困难。

关于c++ - 颜色类型 3 的 PNG 图像纹理格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14373099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com