当我构建自定义相机时,我通过以下代码设置当前设备的闪光模式:
try currentDevice.lockForConfiguration()
currentDevice.flashMode = .on
currentDevice.unlockForConfiguration()
我的捕获图片功能是默认的captureOutput
功能(由AVCaptureVideoDataOutputSampleBufferDelegate
覆盖),效果很好,但只有闪光灯模式不起作用。
func captureOutput(
_ output: AVCaptureOutput,
didOutput sampleBuffer: CMSampleBuffer,
from connection: AVCaptureConnection
) {
if !takePicture {
return
}
takePicture = false
guard let cvBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else {
return
}
let ciImage = CIImage(cvImageBuffer: cvBuffer)
let uiImage = UIImage(ciImage: ciImage)
savePicture(image: uiImage)
}
首先var flashMode: AVCaptureDevice.FlashMode { get set }
已被弃用(Apple docs)
也许你的意思是这个flashMode
它设置在AVCapturePhotoSettings
上并取代了已弃用的那个。
但是,如果您需要打开LED背光,则应在AVCaptureDevice
对象上使用.torchMode
。
为此,您需要确保currentDevice
有可用的割炬。
guard currentDevice.isTorchAvailable else { ...fallbac... }
然后,您需要锁定设备以进行配置。
try currentDevice.lockForConfiguration()
并设置所需的手电筒模式。
currentDevice.torchMode = .on // or .off
请记住在完成配置后解锁设备
currentDevice.unlockForConfiguration()
如果您想以一定程度的强度设置手电筒模式,您可以使用此方法将其打开(而不是currentDevice.torchMode = .on
)
try currentDevice.setTorchModeOn(level: 0.3)