如何在iOS上使用代码截屏?

3
如何通过程序截取屏幕截图?

可能是如何在iOS上以编程方式进行屏幕截图的重复问题。 - Cœur
2个回答

14
你可以使用 UIGraphicsBeginImageContext来实现此目的。
例如:
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
[self.myView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage*theImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

NSData*theImageData = UIImageJPEGRepresentation(theImage, 1.0 ); //you can use PNG too
[theImageData writeToFile:@"example.jpeg" atomically:YES];

这里:

1. 首先我获取图像上下文,将其命名为myView,它是一个Webview,你可以用任何你想用的名字。这会获取网页视图中当前可见的屏幕截图。

2. 通过使用UIGraphicsGetImageFromCurrentImageContext(),我将我的Webview的屏幕截图转换为图像。

3. 通过使用UIGraphicsEndImageContext(),我结束了上下文。

4. 我将图像保存在NSData中,因为我需要将截图通过邮件发送。如果需要发送或保存,保留在NSData中似乎是个不错的选择。

编辑: 要将其添加到相机胶卷中,你需要编写以下代码:

UIImageWriteToSavedPhotosAlbum(theImage,nil,NULL,NULL); 添加在 UIGraphicsEndImageContext();之后。


我已将它实现到我的代码中,但似乎无法保存屏幕截图到相机胶卷中。我是不是漏掉了什么? - RafeeJ
@RafeeSkull-manJenkins,要将其保存到相机胶卷中,您需要使用UIImageWriteToSavedPhotosAlbum,请查看我的编辑。 - iNoob
我觉得这段代码可能无法处理相机或OpenGL帧,或者是我漏看了什么……? - Francisco Gutiérrez
@iNoob 尝试了这个方法,但发现它没有包含状态栏和导航栏,只有导航栏下面的视图。如何进行全屏截图? - S1U

1

看一下这个答案。它还可以处理Retina显示。

实际上,要解释这个过程,

  • 选择一个图像上下文大小(可能是您需要屏幕截图的图层大小)
  • 在创建的上下文中渲染要拍摄的图层
  • 从上下文获取图像,然后完成!

我只是想加上一点自己的解释,所以选择回答它。 - Vignesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接