如何设置面向镜头的快速移动相机放大

问题描述:

我正在尝试使用快速移动应用程序,并且我想使用前置摄像头。 我使用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)