Вывод AVCaptureOutput делает темное изображение даже при включенной вспышке

#ios #ios4 #avfoundation

#iOS #ios4 #avfoundation

Вопрос:

Я разработал реализацию AVFoundation и ImageIO, чтобы позаботиться о фотосъемке в моем приложении. Однако у меня с этим проблема. Изображения, которые я делаю, всегда темные, даже если вспышка гаснет. Вот код, который я использую:

         [[self currentCaptureOutput] captureStillImageAsynchronouslyFromConnection:[[self currentCaptureOutput].connections lastObject]
                                        completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {

                                            [[[blockSelf currentPreviewLayer] session] stopRunning];
                                            if (!error) {
                                                NSData *data            = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
                                                CGImageSourceRef source = CGImageSourceCreateWithData((CFDataRef) data, NULL);

                                                if (source) {

                                                    UIImage *image = [blockSelf imageWithSource:source];
                                                    [blockSelf updateWithCapturedImage:image];
                                                    CFRelease(source);

                                                }

                                            }

                                        }];
  

Есть ли что-нибудь, что могло бы привести к тому, что полученное изображение не включало вспышку?

Ответ №1:

Я обнаружил, что иногда получаю темные изображения, если AVCaptureSession был настроен непосредственно перед этим вызовом. Возможно, для настройки автоматической экспозиции и баланса белого требуется некоторое время.

Решение состояло в том, чтобы настроить AVCaptureSession, затем дождаться, пока adjustingExposure и adjustingWhiteBalance свойства AVCaptureDevice будут одинаковыми NO (обратите внимание на это с помощью KVO) перед вызовом -[AVCaptureStillImageOutput captureStillImageAsynchronouslyFromConnection: completionHandler:] .

Комментарии:

1. Как вы это делаете? Если я выполняю как настройку экспозиции, так и настройку баланса белого — когда именно я должен вызывать captureStillImageAsynchronouslyFromConnection? Прямо из observeValueForKeyPath?

2. Вы нашли, как это сделать? Потому что у меня сейчас точно такая же проблема на моем iPhone 6.