2011-12-13 46 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

相關問題