iphone - AVCaptureVideoPreviewLayer : taking a snapshot

标签 iphone cocoa-touch avfoundation

我正在尝试模拟默认相机应用程序中看到的动画,其中相机取景器的快照以动画方式显示在应用程序显示屏的一角。

掌握解决此问题关键的 AVCaptureVideoPreviewLayer 对象对这些要求不太开放:尝试使用 .. 在新层中创建它的副本

- (id)initWithLayer:(id)layer

..返回一个空层,没有图像快照,所以显然这里有一些更深层次的魔法。

非常欢迎您提供线索/嘘声。

M.

最佳答案

以略有不同的角度面对同样的困境。

以下是可能的解决方案,但在我看来都不是很好:

  • 您可以向 AVCaptureSession 添加 AVCaptureStillImageOutputAVCaptureVideoDataOutput。当您将 sessionPreset 设置为 AVCaptureSessionPresetHigh 时,您将开始通过 API 获取帧,当您切换到 AVCaptureSessionPresetPhoto 时,您可以拍摄真实图像。因此,在拍照之前,您可以切换到视频,获取一帧,然后返回到相机。主要需要注意的是,相机需要“很长”的时间(几秒钟)才能在摄像机和图片相机之间切换。

  • 另一种选择是仅使用相机输出 (AVCaptureStillImageOutput),并使用 UIGetScreenImage 获取手机的屏幕截图。然后,您可以裁剪控件并仅保留图像。如果您要在图像上显示 UI 控件,这会变得复杂。另外,根据this发布后,苹果开始拒绝使用此功能的应用程序(总是不确定)。

  • 除此之外,我还尝试使用AVCaptureVideoPreviewLayer。有this post 将 UIView 或 CALayer 保存到 UIImage。但这一切都会产生清晰或白色的图像。我尝试访问图层、 View 图层、superlayerpresentationLayermodelLayer,但无济于事。我猜AVCaptureVideoPreviewLayer中的数据是非常内部的,并不是常规层基础设施的真正一部分。

希望这有帮助, 奥德。

关于iphone - AVCaptureVideoPreviewLayer : taking a snapshot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3397899/

相关文章:

iphone - 关于创建 iPhone Piano UI 的问题

ios - 存储在核心数据中时是否必须存储两个实体数据?

iphone - 在第一次结束动画后触发其他动画(Objective-C)

Objective-C – ABMultiValueRef 获取类型 (ABAddressBook)

ios - 将图像从 UIImagePickerController 传递到另一个 ViewController

ios - 从点数组中获取矩形

ios - 异常 com.apple.coreaudio.avfaudio 原因 : error -50

android - 在 Android 上播放的 iOS 上的音频文件听不到我的声音。只有声音不好

iphone - transitionFromView 做了正确的事情,但没有动画。为什么?

iphone - NSArray 在 objective-c 中丢失数据,有人可以解释为什么吗?