Camera 拍摄UIView的屏幕截图,其中其子视图是摄影机会话

Camera 拍摄UIView的屏幕截图,其中其子视图是摄影机会话,camera,avfoundation,screenshot,calayer,layer,Camera,Avfoundation,Screenshot,Calayer,Layer,我正在构建一个应用程序,我需要在其中拍摄一个视图的屏幕截图,该视图的子视图是摄像头会话(AVFoundation会话)。我尝试过以下代码: CGRect rect = [self.containerView bounds]; UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f); CGContextRef context = UIGraphicsGetCurrentContext(); [self.containerView.lay

我正在构建一个应用程序,我需要在其中拍摄一个视图的屏幕截图,该视图的子视图是摄像头会话(AVFoundation会话)。我尝试过以下代码:

CGRect rect = [self.containerView bounds];
UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.containerView.layer renderInContext:context];
UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
这有效地为我提供了一张带有视图的UIImage,只是相机会话是黑色的:


我尝试过私有方法
UIGetScreenImage()
,效果非常好,但由于苹果不允许,我无法使用它。我也试过这个,但都一样。我已经使用层跟踪了AVFoundation会话中的问题。我怎样才能做到这一点?该应用程序有一个容器视图,其中有两个视图是停止的摄像头会话。

我目前也在寻找解决此问题的方法

我目前外出,因此无法测试我发现的内容,但请查看以下链接:

似乎它在正确的轨道上-这是 (这是最初的职位)


当我设法让它工作,我一定会更新这个答案

如果使用iOS 7,它相当简单,您可以从UIViewController执行以下操作:

UIView *snapshotView = [self.view snapshotViewAfterScreenUpdates:YES];
您也可以从寡妇处使用此链接:

对于iOS 6和更早版本,我只能找到以下苹果技术问答:[如何拍摄包含UIKit和摄像头元素的应用程序截图?]

  • 捕获相机视图的内容
  • 将捕获的相机内容自己绘制到渲染UIKit元素的图形上下文中。(与您在代码中所做的类似)

  • 我也看到过这些帖子,但我无法实现它:/我不久前也遇到过这个问题。问题是摄影机预览层(以及一些自定义渲染层)正在使用OpenGL。我记得,您使用的方法不适用于GL支持的图层。我会四处打听,看看这是不是真的。@SteveMcFarlin你找到解决问题的方法了吗?我面临着同样的问题你找到解决方案了吗?我很困惑,因为这个解决方案似乎不起作用,但它是被选中的。我尝试过这种方法的各种变体,但没有成功。还是全黑的。这真的有效吗?@Vlad我试过了,但没用,你找到解决办法了吗?