首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS7中来自AVCaptureVideoPreviewLayer的模糊图像

iOS7中来自AVCaptureVideoPreviewLayer的模糊图像
EN

Stack Overflow用户
提问于 2013-09-05 01:28:06
回答 2查看 1.7K关注 0票数 2

我正在开发一个iOS7视频录制应用程序。我们的应用程序中的相机屏幕需要显示一个模糊的背景,类似于iOS7控制中心中显示的背景。在显示视频预览时,我们需要显示模糊的控制中心。正如WWDC视频226中所建议的,我已经使用下面提供的代码来获取相机预览快照,然后应用模糊,并将此模糊图像设置为我的视图。

代码语言:javascript
复制
UIGraphicsBeginImageContextWithOptions(_camerapreview.frame.size, NULL, 0);

[_camerapreview drawViewHierarchyInRect:rect];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

lightImage = [newImage applyLightEffect]

这里的_camerapreview是一个包含AVCaptureVideoPreviewLayer的UIView。从上下文中获得的*newImage由于某种原因是黑色的。

但是,如果我使用_camerapreview,snapshotView会返回一个包含预览层内容的UIview。但是没有办法在UIview上应用模糊。

如何从相机预览层获取模糊图像?

EN

回答 2

Stack Overflow用户

发布于 2013-09-30 10:31:20

我建议你把你的叠加到视频预览本身作为一个合成的视频层,并添加一个模糊过滤器。(查看用于将图像合成到视频上的WWDC会话和AVSimpleEditoriOS示例代码),这样您就可以留在GPU上,而不是从GPU-> AVFoundation回读,这是很慢的。然后在清晰的背景UIView中将覆盖的UI元素放在视频预览的顶部。

这应该会提供更好的性能。和苹果一样好吗?好吧,他们正在使用一些开发者还不能访问的私人东西...

票数 1
EN

Stack Overflow用户

发布于 2014-03-06 17:16:22

引用这篇Technical Q&A中的苹果

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

在我关于AVFoundation的经验中不是这样的,如果您在视图上使用托管预览层的方法,您将只能获得视图的内容,而不会获得预览层的图像。使用-snapshotViewAfterScreenUpdates:将返回一个托管特殊层的UIView。如果您尝试从该视图创建图像,您将什么也看不到。

我所知道的唯一解决方案是AVCaptureVideoDataOutputAVCaptureStillImageOutput。每一个都有它自己的限制。第一个不能与AVCaptureMovieFileOutput采集同时工作,后者会使快门发出噪声。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18620214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档