Проблема при съемке фото со вспышкой при использовании AVCapturePhotoOutput

Я работаю над приложением камеры. Я использую AVCapturePhotoOutput для устройства ios 10.x и AVCaptureStillImageOutput для устройств ниже 10.x.

Я использую настройки захвата ниже при захвате фото

let settings = AVCapturePhotoSettings()

let previewPixelType = settings.availablePreviewPhotoPixelFormatTypes.first!
        let previewFormat = [kCVPixelBufferPixelFormatTypeKey as String: previewPixelType,
                             kCVPixelBufferWidthKey as String: 1080,
                             kCVPixelBufferHeightKey as String: 1080,
                             ]
settings.previewPhotoFormat = previewFormat
settings.isHighResolutionPhotoEnabled = true
settings.flashMode = .on
settings.isAutoStillImageStabilizationEnabled = true
self.captureOutputPhoto?.capturePhoto(with: settings, delegate: self)

когда я пытаюсь сделать снимок, используя настройки выше

captureOutput:didFinishProcessingPhotoSampleBuffer:previewPhotoSampleBuffer:resolvedSettings:bracketSettings:error

Выше делегата выдает ошибку первый раз. Я новичок в AVCapturePhotoSettings. проблема возникает после каждого успешного фотосъемки в режиме вспышки.

3 ответа

Из документации Apple:

Вы не можете включить стабилизацию изображения, если включен режим вспышки. (Включение флэш-памяти имеет приоритет над параметром isAutoStillImageStabilizationEnabled.)

Не уверен, что должно выдать ошибку, но вы можете попробовать удалить эту строку

settings.isAutoStillImageStabilizationEnabled = true

captureOutput:didFinishProcessingPhotoSampleBuffer:previewPhotoSampleBuffer:resolvedSettings:bracketSettings:error: метод делегата Objective C, версия Swift которого photoOutput(_:didFinishProcessingPhoto:previewPhoto:resolvedSettings:bracketSettings:error:), устарела.

Вместо этого реализуйте метод Swift photoOutput(_:didFinishProcessingPhoto:error:),

Я использую этот метод для обработки настроек вспышки. AVCaptureDevice в основном камера, которую вы используете, и AVCaptureFlashMode это режим вспышки, который вы хотите использовать.

func changeFlashSettings(device: AVCaptureDevice, mode: AVCaptureFlashMode) {
    do {
        try device.lockForConfiguration()
        device.flashMode = mode
        device.unlockForConfiguration()
    } catch {
        print("Change Flash Configuration Error: \(error)")
    }
}

При этом вы можете установить настройку вспышки на on, off или же auto, Надеюсь это поможет.

Другие вопросы по тегам