gpt4 book ai didi

iphone - AVCaptureDevice 相机缩放

转载 作者:IT王子 更新时间:2023-10-29 08:07:38 43 4
gpt4 key购买 nike

我有一个简单的 AVCaptureSession 正在运行,以在我的应用程序中获取相机源并拍照。如何使用相机的 UIGestureRecognizer 实现“双指缩放”功能?

最佳答案

接受的答案实际上已经过时,我不确定它是否真的会拍摄放大图像的照片。有一种方法可以像 bcattle answer 所说的那样放大。他的回答的问题是它不负责用户可以放大然后从该缩放位置重新开始的事实。他的解决方案将创建某种不太优雅的跳跃。

执行此操作的最简单和最优雅的方法是使用捏合手势的速度。

-(void) handlePinchToZoomRecognizer:(UIPinchGestureRecognizer*)pinchRecognizer {
const CGFloat pinchVelocityDividerFactor = 5.0f;

if (pinchRecognizer.state == UIGestureRecognizerStateChanged) {
NSError *error = nil;
if ([videoDevice lockForConfiguration:&error]) {
CGFloat desiredZoomFactor = device.videoZoomFactor + atan2f(pinchRecognizer.velocity, pinchVelocityDividerFactor);
// Check if desiredZoomFactor fits required range from 1.0 to activeFormat.videoMaxZoomFactor
device.videoZoomFactor = MAX(1.0, MIN(desiredZoomFactor, device.activeFormat.videoMaxZoomFactor));
[videoDevice unlockForConfiguration];
} else {
NSLog(@"error: %@", error);
}
}
}

我发现将 arctan 函数添加到速度会稍微缓和放大缩小效果。它并不完全完美,但效果足以满足需要。当它几乎达到 1 时,可能还有另一个功能可以缓解缩小。

注意:此外,捏合手势的比例从 0 到无穷大,其中 0 到 1 是捏合(缩小),1 到无穷大是捏合(放大)。为了获得良好的放大缩小效果,您需要有一个数学方程式。速度实际上是从无穷大到无穷大,以 0 为起点。

编辑:修复了范围异常导致的崩溃。感谢@garafajon !

关于iphone - AVCaptureDevice 相机缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220958/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com