繁体   English   中英

iOS屏幕快照实时摄像头预览

[英]iOS screenshot live camera preview

我的应用程序(在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()!)也无济于事

苹果在使用UIGraphicsGetImageFromCurrentImageContext从我们的自定义摄像机视图捕获AVCaptureVideoPreviewLayer方面存在一些限制。 如果我们有摄像机视图,则即使UIView Snapchat方法也无法使用。

但是我们确实有一种变通办法来获得效果。 获取每个相机帧的图像缓冲区,并将其转换为UIImage 手动将图像添加到我们的屏幕截图中。 并不是那么简单,并且AFAIK这是最好的解决方法。 可以在SO解答中找到更多信息。可以在图形上下文中渲染AVCaptureVideoPreviewLayer吗?

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)
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM