【问题标题】:Is there any way to programmatically set the camera focus off an iOS device to infinity?有没有办法以编程方式将 iOS 设备上的相机焦点设置为无限远?
【发布时间】:2011-12-13 11:50:36
【问题描述】:

我正在创建一个应用程序来锁定相机焦点以进行视频录制。我想在不让用户手动调整焦点的情况下将焦点锁定到无穷远。这可能吗?谢谢!

【问题讨论】:

  • 你找到方法了吗?

标签: ios camera focus infinity


【解决方案1】:

很遗憾,没有。正如Artem所说,您可以将相机设置为对焦锁定模式;进入自动对焦模式(对焦,然后锁定)或连续自动对焦模式,但您无法为相机提供特定的对焦距离。

我能想到的最好的方法(对于曝光和白平衡控制,它们同样受到限制)是让用户将相机指向一个适当的场景(在你的情况下,是很远的地方)并拥有他/她按下锁定按钮。

捕获设备API的详细信息,例如: https://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVCaptureDevice_Class/Reference/Reference.html

【讨论】:

  • 一个有效的答案?这是我发现的唯一方法。您可以将相机的焦点设置为“锁定”或“解锁”,您可以告诉它“立即对焦,然后锁定”(具体请参见developer.apple.com/library/mac/#documentation/AVFoundation/…)。你不能告诉相机什么聚焦,只有什么时候聚焦。所以我能想到的将焦点锁定到无限远的唯一方法是让用户将相机的焦点对准很远的东西,然后锁定它。如果您能找到更好的方法,请告诉我们!
  • 另一个问题:至少,对于曝光和白平衡,锁的状态会在应用程序的调用中被记住,但锁定的值不会。如果我的应用退出活动状态,然后再次变为活动状态,相机会锁定它当前看到的任何值,不是它以前拥有的值:即使 value 也会丢失i>state 被记住。如果焦点的行为方式相同,则依赖于焦点锁定的应用程序应在后台运行时将其关闭以避免无效值(我在我的 applicationWillResignActive: 处理程序中关闭了相机锁定,这似乎涵盖了所有情况)。跨度>
【解决方案2】:

这是禁用焦点的方法,它一直锁定它:

// Find a suitable capture device
    AVCaptureDevice *cameraDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    // SETUP FOCUS MODE
    if ([cameraDevice lockForConfiguration:nil]) {

        [cameraDevice setFocusMode:AVCaptureFocusModeLocked];

        [cameraDevice unlockForConfiguration];
    }
    else{
        NSLog(@"error while configuring focusMode");
    }

“锁定无限远”是什么意思?

【讨论】:

  • 无限锁定焦点 = 将焦点锁定到可能的最远点
  • 它锁定在特定距离,所以每次启动它都会锁定不同的距离(不是最远),所以它不是正确答案
【解决方案3】:

AVCaptureDevice 有函数 setFocusModeLockedWithLensPosition:completionHandler:

你可以用它来设置1.0以达到“无限”的距离

    func focusTo(value : Float) {
      if let device = captureDevice {
      if(device.lockForConfiguration(nil)) {
         device.setFocusModeLockedWithLensPosition(value, completionHandler: { (time) -> Void in
            //
        })
        device.unlockForConfiguration()
      }
    }

更新: 根据 Apple 文档,1.0 并不代表无限远的焦点。

【讨论】:

  • link 可能位置的范围是 0.0 到 1.0,其中 0.0 是镜头可以对焦的最短距离,而 1.0 是最远距离。请注意,1.0 并不代表无限远的焦点。默认值为 1.0。对我来说它有效
  • 这是答案,但投票率很低,因为它是一项新功能。谢谢!很有帮助。
  • 这会导致异常。无论设备如何,检查“lockingFocusWithCustomLensPositionSupported”都不会返回 true。这里缺少什么?
  • @kanso 你检查后置摄像头的这个布尔值吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 2015-07-02
  • 2014-07-24
  • 1970-01-01
  • 2018-08-01
  • 2018-10-14
  • 2019-09-01
相关资源
最近更新 更多