iOS截图实时相机预览

时间:2017-06-30 07:48:06

标签: ios swift swift3 camera screenshot

我的应用程序中有实时摄像头(在scrollView中),为了过渡,我需要截取摄像头预览的截图并获取该图像,但

 drawHierarchy(in rect: CGRect,afterScreenUpdates afterUpdates: Bool) 

方法无济于事。有没有办法在没有OpenGL的情况下实现这一目标。请帮助,因为我已经好几天了,我正在寻找解决方案。

 UIGraphicsBeginImageContextWithOptions((self.getRectOfSceneInScrollView(index: self.selectedSceneIndex!).size), false, 0);
self.scrollView.drawHierarchy(in: CGRect.init(--some rect--), afterScreenUpdates: true)

let image:UIImage = UIGraphicsGetImageFromCurrentImageContext()!;

UIGraphicsEndImageContext()

更新: self.scrollView.layer.render(在:UIGraphicsGetCurrentContext()!)也没有帮助

2 个答案:

答案 0 :(得分:1)

Apple使用AVCaptureVideoPreviewLayer从我们的自定义相机视图中捕获UIGraphicsGetImageFromCurrentImageContext有一些限制。如果我们有摄像机视图,即使UIView Snapchat方法也行不通。

但我们确实有一个解决方法来获得效果。获取每个相机帧的图像缓冲区并将其转换为UIImage。手动将图像添加到我们的屏幕截图。它并不那么简单,AFAIK这是最好的解决方法。更多信息可以在Is it possible to render AVCaptureVideoPreviewLayer in a graphics context?

的SO答案中找到

答案 1 :(得分:-1)

func takeScreenshot(view: UIView) -> UIImageView {
        UIGraphicsBeginImageContext(view.frame.size)
        view.layer.renderInContext(UIGraphicsGetCurrentContext())
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)

        return UIImageView(image: image)
    }