C 为什么我在试图使用freeimage库保存opengl缓冲区时总是得到黑色图像?
有没有人有使用freeimage库保存opengl缓冲区的经验 这是我的密码:C 为什么我在试图使用freeimage库保存opengl缓冲区时总是得到黑色图像?,c,opengl,freeimage,C,Opengl,Freeimage,有没有人有使用freeimage库保存opengl缓冲区的经验 这是我的密码: void screenshot(const char *ptr){ GLint viewPort[4]; glGetIntegerv(GL_VIEWPORT, viewPort); GLubyte *pixels=new GLubyte[3*winWidth*winHeight]; glPixelStorei(GL_PACK_ALIGNMENT, 1); glReadPi
void screenshot(const char *ptr){
GLint viewPort[4];
glGetIntegerv(GL_VIEWPORT, viewPort);
GLubyte *pixels=new GLubyte[3*winWidth*winHeight];
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadPixels(0, 0, viewPort[2],viewPort[3], GL_RGB, GL_UNSIGNED_BYTE, pixels);
FIBITMAP* image = FreeImage_ConvertFromRawBits(pixels,viewPort[2], viewPort[3],3*viewPort[2]
,24,FI_RGBA_RED, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK,false);
FreeImage_Save(FIF_BMP, image, ptr, 0);
FreeImage_Unload(image);
delete pixels;
}
为什么我总是得到黑色图像?您没有设置从哪个缓冲区读取。如果要在缓冲区交换后拍摄屏幕截图,则必须从前缓冲区读取。如果要在交换缓冲区之前拍摄屏幕截图,请从后缓冲区读取。您是否尝试过任何调试?在调用
glReadPixels
后,尝试检查pixels
变量。确保您在绘制对象后调用此函数,而不是在glClear
之后立即调用。是的,您是对的,这是出问题的地方,谢谢。但是我如何读取前缓冲区,只需在使用屏幕截图函数之前添加一个函数glreadbuffer(GL_front)?@XiaojunZhao:是的,您就是这样做的。