我正在预览模式下拍摄视频,希望显示相机拍摄的静止图像。
我目前将图像和捕获输出保存到接口中定义的ivars,如下所示:
UIImage *snapshot
AVCaptureStillImageOutput* stillImageOutput;
视频显示正常。但是,当我尝试捕获和显示静止图像时,没有显示任何内容,事实上,调试器会显示stillimageoutput和image为零。我认为这可能是异步捕获的一个时间问题,我需要使用一个完成处理程序,但是我在完成处理程序上很弱。
捕获静止图像后立即显示而不占用用户界面的正确方法是什么:
要捕获静止的代码:
- (void)takeSnapshot {
AVCaptureConnection *videoConnection = nil;
for (AVCaptureConnection *connection in stillImageOutput.connections) {
for (AVCaptureInputPort *port in [connection inputPorts]) {
if ([[port mediaType] isEqual:AVMediaTypeVideo]) {
videoConnection = connection;
break;
}
}
if (videoConnection) {
break;
}
}
[stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection
completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
if (imageDataSampleBuffer != NULL) {
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
snapshot = [UIImage imageWithData:imageData];
}
}];
}
显示静止的代码。请注意,缺少可能是问题的完成处理程序,但是,我不确定如何编写它…
[self takeSnapshot];
self.imageView.image = snapshot;