gpt4 book ai didi

c++ - DevIL/OpenIL 未加载 alpha channel

转载 作者:行者123 更新时间:2023-11-30 04:59:27 24 4
gpt4 key购买 nike

我遇到一个问题,我想使用 DevIL 作为字节数组加载的 .png 图像没有 alpha channel 。

全黑图像也显示为 alpha channel 值为 0。

这是我的图片加载函数:

DevILCall(ilGenImages(1, &m_ImageID));
DevILCall(ilBindImage(m_ImageID));

ASSERT("Loading image: " + path);

DevILCall(ilLoadImage(path.c_str()));

GraphicComponents::Image image(
ilGetData(),
ilGetInteger(IL_IMAGE_HEIGHT),
ilGetInteger(IL_IMAGE_WIDTH),
ilGetInteger(IL_IMAGE_BITS_PER_PIXEL)
);

return image;

我使用的Image对象如下:

struct Image
{
ILubyte * m_Image;
const unsigned int m_Height;
const unsigned int m_Width;
const unsigned int m_BPP;

Image(ILubyte imageData[ ], unsigned int height, unsigned int width, unsigned int bpp);
~Image();
};

这就是我现在打印图像数据的方式:

for(unsigned int i = 0; i < image->m_Height*image->m_Width*4; i+=4)
{
LOG("Red:");
LOG((int) image->m_Image[i]);
LOG("Green:");
LOG((int) image->m_Image[i+1]);
LOG("Blue:");
LOG((int) image->m_Image[i+2]);
LOG("Alpha:");
LOG((int) image->m_Image[i+3]);
}

我还尝试使用 ilTexImage() 将加载的图像格式化为 RGBA 格式,但这似乎也不起作用。当我将循环变量的最大值更改为图像中像素数的 4 倍时,打印循环开始读取垃圾值。

该图像也被确认具有 alpha channel 。这里可能出了什么问题?

编辑:ilGetInteger(IL_IMAGE_BPP) 返回 3,目前应该表示 RGB。当我使用 ilTexImage() 强制使用 4 个 channel 时,ilGetInteger(IL_IMAGE_BPP) 返回 4,但我仍然看到垃圾值在标准输出中弹出

最佳答案

加载图像后通过简单的 ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE) 调用解决了这个问题。

我想 DevIL 默认以无符号字节值以 RGB 模式加载图像,否则,您需要使用 ilConvertImage() 转换加载的图像。

关于c++ - DevIL/OpenIL 未加载 alpha channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51217346/

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