Я снимаю видео в режиме предварительного просмотра и хотел бы отобразить неподвижное изображение, снятое камерой.
В настоящее время я сохраняю изображение и вывод изображения в виде иваров, определенных в интерфейсе как:
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;