gpt4 book ai didi

c++ - freeimage 加载 png 透明 c++

转载 作者:行者123 更新时间:2023-11-30 02:51:14 28 4
gpt4 key购买 nike

我已将 PNG 图像加载到我的场景中。虽然图像本身加载正确(我想要显示的内容),但我遇到的问题是图像周围的透明度。在应该透明的地方,白色和黑色的 Blob 填充了那个空间。

void Renderer::loadTexture()
{
const char textName[64] = ".\\foo.png";

FIBITMAP *dib = FreeImage_Load(FIF_PNG, textName, PNG_DEFAULT);
dib = FreeImage_ConvertTo24Bits(dib);


if (FreeImage_GetBPP(dib) != 32)
{
FIBITMAP* tempImage = dib;
dib = FreeImage_ConvertTo32Bits(tempImage);
}

if (dib != NULL)
{
glGenTextures(1, &g_textureID);
glBindTexture(GL_TEXTURE_2D, g_textureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

BYTE *bits = new BYTE[FreeImage_GetWidth(dib) * FreeImage_GetHeight(dib) * 4];

BYTE *pixels = (BYTE*) FreeImage_GetBits(dib);

for (int pix = 0; pix<FreeImage_GetWidth(dib) * FreeImage_GetHeight(dib); pix++)
{
bits[pix * 4 + 0] = pixels[pix * 4 + 2];
bits[pix * 4 + 1] = pixels[pix * 4 + 1];
bits[pix * 4 + 2] = pixels[pix * 4 + 0];
}

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, FreeImage_GetWidth(dib), FreeImage_GetHeight(dib), 0,
GL_RGBA, GL_UNSIGNED_BYTE, bits);

cout << textName << " loaded." << endl;

FreeImage_Unload(dib);
delete bits;
}


}

最佳答案

首先,GL_RGBA 对于红、绿、蓝和 Alpha(Alpha=透明度)各有一个字节。您的代码显然没有处理 alpha(像素的第 4 个字节)。尝试添加以下行:

    for (int pix = 0; pix<FreeImage_GetWidth(dib) * FreeImage_GetHeight(dib); pix++)
{
bits[pix * 4 + 0] = pixels[pix * 4 + 2];
bits[pix * 4 + 1] = pixels[pix * 4 + 1];
bits[pix * 4 + 2] = pixels[pix * 4 + 0];
bits[pix * 4 + 3] = pixels[pix * 4 + 3]; // Add this line to copy Alpha
}

其次,如果仍然不起作用,请尝试删除 FreeImage_ConvertTo24Bits 行(即使可以,也请尝试删除此行):

// dib = FreeImage_ConvertTo24Bits(dib); // Remove this line
if (FreeImage_GetBPP(dib) != 32)
{
FIBITMAP* tempImage = dib;
dib = FreeImage_ConvertTo32Bits(tempImage);
}

将图像转换为 24 位然后再转换回 32 位很奇怪。也许它会丢弃 alpha channel 。

我没有尝试运行整个程序并调试它。只是提供一些您可以尝试的提示。

关于c++ - freeimage 加载 png 透明 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19874296/

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