- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 AVFoundation 中的 AVCaptureDevice 实现“双指缩放”功能:
@IBAction func pinchGestureDetected(_ gestureRecognizer: UIPinchGestureRecognizer) {
switch gestureRecognizer.state {
case .began:
print ("began")
self.currenZoomFactor = self.videoDevice!.videoZoomFactor
do {
try self.videoDevice!.lockForConfiguration()
} catch let error as NSError {
NSLog("Could not lock device for configuration: %@", error)
}
case .changed:
print ("changed")
var zoomValue : CGFloat = ((gestureRecognizer.scale) - 1) + self.currenZoomFactor
if zoomValue > min(10.00, self.videoDevice!.activeFormat.videoMaxZoomFactor) {
zoomValue = min(10.00, self.videoDevice!.activeFormat.videoMaxZoomFactor)
} else if zoomValue < 1.00 {
zoomValue = 1.00
}
self.videoDevice!.videoZoomFactor = sentZoomValue
case .ended, .cancelled:
print ("ended/canceld")
self.videoDevice!.unlockForConfiguration()
default:
break
}
}
以上工作正常。然而,在上面,缩放率是线性的与缩放比例。这使得在更高的缩放因子下缩放速度要慢得多。
如何在更高的缩放系数下获得加速的缩放率?
最佳答案
为了获得更快的缩放率,我们需要进行以下计算。
您可以从您的 pinchGestureDetected
func zoomto(scale: CGFloat, hasBegunToZoom: Bool) {
if hasBegunToZoom {
initialPinchZoom = captureDevice.videoZoomFactor
}
do {
try captureDevice.lockForConfiguration()
if scale < 1.0 {
zoomFactor = initialPinchZoom - pow(captureDevice.activeFormat.videoMaxZoomFactor, 1.0 - scale)
}
else {
zoomFactor = initialPinchZoom + pow(captureDevice.activeFormat.videoMaxZoomFactor, (scale - 1.0f) / 2.0f)
}
zoomFactor = min(10.0, zoomFactor)
zoomFactor = max(1.0, zoomFactor)
captureDevice.videoZoomFactor = zoomFactor
captureDevice.unlockForConfiguration()
} catch let error as NSError {
NSLog("Could not lock device for configuration: %@", error)
}
}
你可以像下面这样调用
@IBAction func pinchGestureDetected(_ gestureRecognizer: UIPinchGestureRecognizer) {
zoomto(scale: gestureRecognizer.scale, hasBegunToZoom:(gestureRecognizer.state == .began))
}
关于ios - AVCaptureDevice videoZoomFactor 双指缩放率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44530460/
我正在使用 AVFoundation/AVFoundation.h 用我的相机做一个项目。现在,我想实现缩放屏幕。 我查看了关于AVCaptureDevice的文档,发现了一个名为“videoZoom
我正在使用 UIPinchGesture 来调整 iPhone 摄像头的 videoZoomFactor。我希望它以与我手指分开的速度相同的速度放大。我在手势识别器处理程序中使用以下代码: let p
我正在努力解决的缩放问题仍然存在。我尝试按照 link1 中的代码使用 AVCaptureSession 获取图像和 link2 . 一切都很好,除了当我尝试实现相机变焦时,事情不会如我所愿地执行。
我正在尝试通过以下代码设置相机的缩放级别: AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AV
我正在尝试使用 AVFoundation 中的 AVCaptureDevice 实现“双指缩放”功能: @IBAction func pinchGestureDetected(_ gestureRe
除缩放系数外,我想使用的所有相机调整都有效。我不知道为什么会这样……有什么想法吗?自定义曝光和焦点设置工作正常。 iOS 中是否发生了一些我不知道的变化? captureSession = AVC
我是一名优秀的程序员,十分优秀!