我正在将OpenGL FBO内容写入TGA文件。我读取BGR格式的像素并保存到未压缩的TGA。奇怪的是,如果我保存单调颜色(没有纹理),我的导出器写入正常,但如果像素数据来了从纹理我得到的结果如下图所示:
这是我使用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());
所以我怀疑我的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);
它出了什么问题?
答案 0 :(得分:2)
我发现了错误。文件打开模式错误了!
shot=fopen(concatString.c_str(),"w");
必须是:
shot=fopen(concatString.c_str(),"wb");
“wb” - 因为我们打算打开二进制文件。
FreeImage做得对,因为它在内部打开文件。
答案 1 :(得分:0)
您的代码中的音高/步幅看似错误。