gpt4 book ai didi

c++ - 用 C++ 将未压缩的 TGA 写入文件

转载 作者:行者123 更新时间:2023-11-28 03:17:05 24 4
gpt4 key购买 nike

我正在将 OpenGL FBO 内容写入 TGA 文件。我以 BGR 格式读取像素并保存到未压缩的 TGA。奇怪的是,如果我保存单调颜色(无纹理),我的导出器写入正常,但如果像素数据出现从纹理中我得到的结果如下图所示: Corrupted export

这是我使用 FreeImage lib 设法获得的正确导出:

    FIBITMAP *img = FreeImage_ConvertFromRawBits(pixels,_frameWidth,_frameHeight, 3 * _frameWidth , 24,FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK,0);
FreeImage_Save(FIF_TARGA ,img,concatString.c_str());

Correct export

所以我怀疑我的 TGA 导出代码有问题:

        GLubyte header[18]={0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

header[12] = _frameWidth & 0xFF;
header[13] = ( _frameWidth >> 8) & 0xFF;
header[14] = (_frameHeight) & 0xFF;
header[15] = (_frameHeight >> 8) & 0xFF;
header[16] = 24;
// write out the TGA header
fwrite(header,sizeof(GLubyte),18,shot);
//write out the data:
fwrite(pixels,sizeof(GLubyte), _frameWidth * _frameHeight * 3 ,shot);
fclose(shot);

有什么问题吗?

最佳答案

我发现了这个错误。它是错误的文件打开模式!

    shot=fopen(concatString.c_str(),"w");

当它必须是:

    shot=fopen(concatString.c_str(),"wb");

"wb"- 因为我们打算打开二进制文件。

FreeImage 做对了,因为它在内部打开文件。

关于c++ - 用 C++ 将未压缩的 TGA 写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16538945/

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