2011-12-13 55 views

回答

6

这是禁用焦点的方式,将锁定它所有的时间:

// 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"); 
    } 

你是什么意思“锁定对焦到无穷大”?

+2

锁定焦点无限远=锁定焦点到最远点可能 – jsrivo

+0

这是一个有效的答案? – VansFannel

6

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

我已经能够提出的最好的(用于曝光和白平衡控制,它们同样受到限制)是让用户将相机指向适当的场景(在你的情况下,远离某些事物)和让他/她按下锁定按钮。在捕获设备API

详细信息,比如它是: https://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVCaptureDevice_Class/Reference/Reference.html

+1

这是一个有效的答案? – VansFannel

+0

有效答案?这是我发现的唯一途径。您可以将相机的焦点设置为“锁定”或“解锁”,您可以将其指定为“现在聚焦并锁定”(有关具体信息,请参阅https://developer.apple.com/library/mac/#documentation/ AVFoundation /参考/ AVCaptureDevice_Class /参考/的reference.html)。你不能告诉相机*注意什么*,只有*当*进行对焦时。所以我唯一可以想到的将焦点锁定到无限远的方法是让用户将相机的焦点瞄准非常远的地方,然后将其锁定。如果你能找到更好的方法,请告诉我们! –

+0

另一个问题:至少在曝光度和白平衡的情况下,锁的状态在应用程序的调用中被记住,但锁定的值不是。如果我的应用程序退出活动状态,然后再次变为活动状态,则摄像机会锁定当前所看到的任何值,*不*以前的值:即使*状态*被记住,*值*也会丢失。如果焦点的行为方式相同,那么取决于焦点锁定的应用程序在背景时应将其关闭以避免无效值(我关闭了我的applicationWillResignActive:处理程序中的摄像头锁定,这似乎涵盖了所有情况)。 –

1

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() 
     } 
    } 

更新: 根据苹果公司的文档,1.0并不代表重点在无限。

+0

做这个工作? –

+0

[链接](https://developer.apple.com/documentation/avfoundation/avcapturedevice/1624643-lensposition) 可能的位置范围是0.0到1.0,其中0.0是镜头可以聚焦的最短距离和1.0最远的。请注意,1.0不代表无限远处的焦点。默认值是1.0。 对我而言它有效 – EdiZ

相关问题