0

我正在将 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);

它有什么问题?

4

2 回答 2

2

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

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

当它必须是:

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

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

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

于 2013-05-14T10:01:50.303 回答
0

看起来您的代码中的音高/步幅是错误的。

于 2013-05-14T09:01:46.460 回答