我正在將OpenGL FBO內容寫入TGA文件。我以BGR格式讀取像素並保存爲未壓縮的TGA。奇怪的是,如果我保存單調顏色(無紋理),我的導出器寫入ok但如果像素數據來自紋理,如下圖中描繪我得到的結果: 在C++中編寫未壓縮的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);
有什麼不對呢?
嘿,那個需要一些研究:-) – user1764961 2013-05-14 10:06:24
我不認爲這可能是這個問題,因爲sizeof(GLubyte)是1.但是你說得對,問題幾乎可以肯定是收集「像素」數據,而不是寫出數據。 – 2013-05-14 10:17:26
你確定這是你所做的唯一改變嗎?我期望sizeof(GLubyte)== 1.你是否改變了_frameWidth例如? – GuyRT 2013-05-14 10:22:22