Проблема при съемке фото со вспышкой при использовании 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 ответа
Вы не можете включить стабилизацию изображения, если включен режим вспышки. (Включение флэш-памяти имеет приоритет над параметром 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
, Надеюсь это поможет.