使用AVCaptureStillImageOutput捕获预览图像

时间:2014-01-23 18:41:55

标签: ios avfoundation avcapturesession

在stackoverflow成员用&#34回答之前;你不应该这样做。这是一个隐私侵犯行为"让我反驳为什么有合理的需要。

我有一个场景,用户可以通过左右滑动来更改相机设备。为了使这个动画看起来不像绝对的废话,我需要在制作这个动画之前抓住一个冻结帧。

我看到的唯一合理的答案是捕获AVCaptureVideoDataOutput的缓冲区,这很好,但现在我无法让用户使用kCVPixelFormatType_420YpCbCr8BiPlanarFullRange拍摄视频/照片,这是一个噩梦,试图获取来自CGBitmapContextCreate的CGImage请参阅How to convert a kCVPixelFormatType_420YpCbCr8BiPlanarFullRange buffer to UIImage in iOS

使用AVCaptureVideoDataOutput代替AVCaptureStillImageOutput时,拍摄静态照片时是否存在严重的质量问题?由于用户将同时拍摄视频和静态照片(不仅仅是定格预览静止图像)此外,还有一个人可以像我一样向我解释这些照片和#34;关于kCVPixelFormatType_420YpCbCr8BiPlanarFullRange / kCVPixelFormatType_32BGRA之间的差异,除了一个不能在旧硬件上工作之外?

1 个答案:

答案 0 :(得分:-1)

我认为没有办法使用AVFoundation直接捕获预览图像。但是,您可以通过执行以下操作捕获预览图层:

UIGraphicsBeginImageContext(previewView.frame.size);
[previewLayer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

其中previewView.layer是 previewLayer是添加到previewView的AVCaptureVideoPreviewLayer。 “图像”从此图层渲染,可用于动画。