如何设置面向镜头的快速移动相机放大
问题描述:
我正在尝试使用快速移动应用程序,并且我想使用前置摄像头。 我使用AVFoundation并尝试了一些代码。但我无法设置前置缩放参数。可能吗?对于后置摄像头,一切都成功了。如何设置面向镜头的快速移动相机放大
我不想使用仿射变换。因为它会降低图像质量。那么,我怎样才能以编程方式设置这个参数呢?
谢谢。
答
您需要为您的相机添加一个zoomFactor变量。
var zoomFactor: CGFloat = 1.0
接着定义一个函数变焦于与捏识别器一起使用。我假设你已经创建了一个前置捕获设备和输入。 frontDevice是我的相机上的可选捕捉设备。以下是我放大该设备的方法。
public func zoom(pinch: UIPinchGestureRecognizer) {
guard let device = frontDevice else { return }
func minMaxZoom(_ factor: CGFloat) -> CGFloat { return min(max(factor, 1.0), device.activeFormat.videoMaxZoomFactor) }
func update(scale factor: CGFloat) {
do {
try device.lockForConfiguration()
defer { device.unlockForConfiguration() }
device.videoZoomFactor = factor
} catch {
debugPrint(error)
}
}
let newScaleFactor = minMaxZoom(pinch.scale * zoomFactor)
switch pinch.state {
case .began: fallthrough
case .changed: update(scale: newScaleFactor)
case .ended:
zoomFactor = minMaxZoom(newScaleFactor)
update(scale: zoomFactor)
default: break
}
}
最后在一些视图中添加一个pinch识别器。
let pgr = UIPinchGestureRecognizer(target: self, action: #selector(zoom))
view.addGestureRecognizer(pgr)