我正在尝试模拟默认相机应用程序中看到的动画,其中相机取景器的快照以动画方式显示在应用程序显示屏的一角。
掌握解决此问题关键的 AVCaptureVideoPreviewLayer 对象对这些要求不太开放:尝试使用 .. 在新层中创建它的副本
- (id)initWithLayer:(id)layer
..返回一个空层,没有图像快照,所以显然这里有一些更深层次的魔法。
非常欢迎您提供线索/嘘声。
M.
最佳答案
以略有不同的角度面对同样的困境。
以下是可能的解决方案,但在我看来都不是很好:
您可以向 AVCaptureSession 添加 AVCaptureStillImageOutput 和 AVCaptureVideoDataOutput。当您将 sessionPreset 设置为 AVCaptureSessionPresetHigh 时,您将开始通过 API 获取帧,当您切换到 AVCaptureSessionPresetPhoto 时,您可以拍摄真实图像。因此,在拍照之前,您可以切换到视频,获取一帧,然后返回到相机。主要需要注意的是,相机需要“很长”的时间(几秒钟)才能在摄像机和图片相机之间切换。
另一种选择是仅使用相机输出 (AVCaptureStillImageOutput),并使用 UIGetScreenImage 获取手机的屏幕截图。然后,您可以裁剪控件并仅保留图像。如果您要在图像上显示 UI 控件,这会变得复杂。另外,根据this发布后,苹果开始拒绝使用此功能的应用程序(总是不确定)。
除此之外,我还尝试使用AVCaptureVideoPreviewLayer。有this post 将 UIView 或 CALayer 保存到 UIImage。但这一切都会产生清晰或白色的图像。我尝试访问图层、 View 图层、superlayer、presentationLayer、modelLayer,但无济于事。我猜AVCaptureVideoPreviewLayer中的数据是非常内部的,并不是常规层基础设施的真正一部分。
希望这有帮助, 奥德。
关于iphone - AVCaptureVideoPreviewLayer : taking a snapshot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3397899/