【问题标题】:Take a screenshot of an UIView where its subviews are camera sessions截取 UIView 的屏幕截图,其中它的子视图是相机会话
【发布时间】:2013-03-29 14:51:47
【问题描述】:

我正在构建一个应用程序,我需要在其中截取其子视图是相机会话(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() 并且效果很好,但是由于Apple 不允许这样做,所以我不能使用它。我也尝试过Apple's docs 中的那个,但它是一样的。我已经使用层将问题跟踪到 AVFoundation 会话。我怎样才能做到这一点?该应用有一个容器视图,其中包含两个已停止的摄像头会话的视图。

【问题讨论】:

  • 不久前我也遇到过这个问题。问题是相机预览层(以及一些自定义渲染层)正在使用 OpenGL。我记得您使用的方法不适用于支持 GL 的图层。我会四处打听,看看这是不是真的。
  • @SteveMcFarlin 你有办法解决这个问题吗,我也遇到了同样的问题stackoverflow.com/questions/41239254/…
  • 您找到解决方案了吗?

标签: camera avfoundation screenshot calayer layer


【解决方案1】:

我目前也在寻找解决这个问题的方法!

我目前不在,所以我无法测试我发现的内容,但请查看以下链接:

Screenshots-A Legal Way To Get Screenshots 似乎它在正确的轨道上 - 这是 Example Project(而here是最初的帖子)

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

【讨论】:

  • 我也看过那些帖子,但我无法实现它:/
【解决方案2】:

如果使用 iOS 7,这相当简单,您可以从 UIViewController 执行类似的操作:

UIView *snapshotView = [self.view snapshotViewAfterScreenUpdates:YES];

您也可以使用寡妇的此链接:iOS: what's the fastest, most performant way to make a screenshot programatically?

对于 iOS 6 及更早版本,我只能找到以下 Apple 技术问答:[如何截取包含 UIKit 和 Camera 元素的应用的屏幕截图?]

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

【讨论】:

  • 我很困惑,因为这个解决方案似乎不起作用,但它已被选中。我已经尝试过这种方法的各种变体,但没有运气。还是全黑。这真的有效吗?
  • @Vlad 我试过了,还是不行,你找到解决办法了吗?
猜你喜欢
  • 2017-05-05
  • 2011-01-13
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
相关资源
最近更新 更多