2013-01-17 23 views
0

可能重复运行:
Why is glReadPixels() failing in this code in iOS 6.0?我想捕捉画面时,任何比赛用OpenGL

我开发使用OpenGL游戏,需要的屏幕截图时,采取最好的拍摄和上传脸谱,但当我采取屏幕拍摄其唯一的黑色屏幕。我做的事 ? 我也在链接中使用代码: take screen Programmatically of UIview+glview 和类似的代码 但没有成功。

我起诉从代码:http://developer.apple.com/library/ios/#qa/qa1704/_index.html

但是所有的代码导致模拟器的图像不在设备(在设备只有黑色或白色)

+0

上述链接问题(以及我的评论)的答案解释了为什么基于glReadPixels()的代码返回黑色图像。您需要在显示屏幕内容之前捕获屏幕内容或使用保留的支持。 –

+0

我使用的是OpenGLES2DView的子类。在这个类中,我想截取屏幕截图,当使用glReadPixels时,它在设备中不起作用,但在simnulator中正确。 –

+0

再次,在那里阅读答案。捕捉失败的原因是,在iOS 6.0+中将内容渲染到屏幕后,glReadPixels()无法使用。您需要保留为CAEAGLLayer启用的备份,或者在调用“-presentRenderbuffer:”之前使用glReadPixels()。 –

回答

0

如果你想利用截屏,然后又尝试用代码&检查:

CGRect screenRect = [[UIScreen mainScreen] bounds]; 
    UIGraphicsBeginImageContextWithOptions(screenRect.size, NO, 0.0); 
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
+0

此代码仅生成白色图像,而不是我项目中的任何图形。 –

0

试试这个,这将采取查看截图并保存到设备的相册。

-(IBAction)captureScreen:(id)sender 
{ 
    UIGraphicsBeginImageContext(self.view.bounds.size); 
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
     UIImage *snapImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    UIImageWriteToSavedPhotosAlbum(snapImage, nil, nil, nil); 
}