私は、OpenGLからの画面領域をビットマップに保存しようとしています。私はFreeImageとSDL_Imageを使ってみましたが、両方とも赤と青のチャンネルを交換する必要があります。私は手動でCreateRGBSurfaceFromを呼び出した後、赤と青のチャンネルを入れ替えない限り、その色が行っているglReadPixelsが青と赤を入れ替えます
bool CaptureScreenRegionToFile (uint32_t In_X, uint32_t In_Y, uint32_t In_Width, uint32_t In_Height, std::string In_Filename)
{
GLubyte* ImageData = (GLubyte*) malloc (In_Width * In_Height * 3);
glPixelStorei (GL_PACK_ALIGNMENT, 1);
glReadPixels (In_X, In_Y, In_Width, In_Height, GL_RGB, GL_UNSIGNED_BYTE, ImageData);
if (CheckError() == false)
{
free (ImageData);
return false;
}
SDL_Surface *Surface;
// JTP TODO Known bug here. Red and blue are swapped, for some reason...
Surface = SDL_CreateRGBSurfaceFrom (ImageData, In_Width, In_Height, 3 * 8, In_Width * 3, 0x00FF0000, 0x0000FF00, 0x000000FF, 0);
SDL_SaveBMP (Surface, In_Filename.c_str());
SDL_FreeSurface (Surface);
free (ImageData);
return true;
}
:もちろん、それは私がこのサンプルコードを持っている ... glReadPixelsは問題がここにあることを疑うに私をもたらしますBMP上でスワップされます。 glReadPixelsはこれを行う必要がありますか?私はそれを正しく呼んでいますか? ここに何が問題なのですか?
[おそらく関連する質問](http://stackoverflow.com/questions/5123387/loading-a-bmp-into-an-opengl-textures-switches-the-red-and-blue-colors-c-win )。 – DarkDust