繁体   English   中英

你如何从AVCaptureVideoPreviewLayer获得UIImage?

[英]How do you get an UIImage from an AVCaptureVideoPreviewLayer?

我已经从CALayer尝试过这个解决方案CGImage(或UIImage)

但是我没有得到任何东西。

就像问题所说,我试图从相机的预览层获得UIImage。 我知道我可以捕获静止图像或使用outputsamplebuffer,但我的会话质量视频设置为照片,所以这两个aproach中的任何一个都很慢,并会给我一个大图像。

所以我认为可以工作的是直接从预览图层获取图像,因为它具有我需要的尺寸,并且已经对其进行了操作。 我只是不知道如何让这个图层绘制到我的上下文中,以便我可以将它作为UIImage。

也许另一种解决方案是使用OpenGL直接将这个图层作为纹理?

任何帮助将不胜感激,谢谢。

引用此技术问答的 Apple:

答:从iOS 7开始,UIView类提供了一个方法-drawViewHierarchyInRect:afterScreenUpdates:,它允许您将完整视图层次结构的快照呈现为屏幕上可见的位图上下文。 在iOS 6及更早版本中,如何捕获视图的绘图内容取决于底层绘图技术。 这个新方法-drawViewHierarchyInRect:afterScreenUpdates:使您能够将接收器视图及其子视图的内容捕获到图像,而不管绘图技术(例如UIKit,Quartz,OpenGL ES,SpriteKit,AV Foundation等)中的视图被渲染

根据我对AVFoundation的体验并非如此,如果您在托管预览图层的视图上使用该方法,则只能获取视图内容而不显示预览图层的图像。 使用-snapshotViewAfterScreenUpdates:将返回一个托管特殊图层的UIView。 如果您尝试从该视图制作图像,则不会看到任何内容。
我所知道的唯一解决方案是AVCaptureVideoDataOutputAVCaptureStillImageOutput 每个人都有自己的限制。 第一个不能与AVCaptureMovieFileOutput采集同时工作,后者产生快门噪声。

暂无
暂无

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

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