2011-12-13 15 views
12

मैं एक ऐप बना रहा हूं जो वीडियो रिकॉर्डिंग उद्देश्यों के लिए कैमरा फोकस लॉक करता है। मैं फोकस को मैन्युअल रूप से फोकस समायोजित किए बिना फोकस को अनंत तक लॉक करना चाहता हूं। क्या यह संभव है? धन्यवाद!क्या आईओएस डिवाइस से अनंतता तक कैमरे के फोकस को प्रोग्रामेटिक रूप से सेट करने का कोई तरीका है?

+0

क्या आपको ऐसा करने का कोई तरीका मिला है? – VansFannel

उत्तर

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

दुख की बात है, नहीं। आर्टम ने कहा, आप कैमरे को फोकस-लॉक मोड में सेट कर सकते हैं; ऑटोफोकस मोड (फोकस, फिर लॉक), या निरंतर ऑटोफोकस मोड में डालें, लेकिन आप कैमरे को ध्यान केंद्रित करने के लिए एक विशिष्ट दूरी नहीं दे सकते।

सबसे अच्छा मैं (एक्सपोजर और सफेद संतुलन नियंत्रण, जो समान रूप से सीमित हैं) के साथ आने में सक्षम है, यह है कि उपयोगकर्ता कैमरे को एक उचित दृश्य (आपके मामले में, कुछ दूर) पर इंगित करता है और उसे लॉक बटन दबाएं। कैप्चर डिवाइस एपीआई पर

विवरण है, यह है जैसे: 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

एक और मुद्दा: एक्सपोजर और सफेद संतुलन के साथ, कम से कम, लॉक की स्थिति को ऐप के इनवॉलेशन में याद किया जाता है, लेकिन लॉक मान नहीं है। यदि मेरा ऐप सक्रिय स्थिति से इस्तीफा दे देता है और फिर फिर से सक्रिय हो जाता है, तो कैमरा वर्तमान में जो भी मूल्य देखता है उसे ताला लगाता है, * नहीं * पहले यह मान था: * * * * को याद किया जाता है, भले ही * राज्य * याद किया जाए। यदि फोकस एक ही तरीके से व्यवहार करता है, तो एक ऐप जो फोकस-लॉक पर निर्भर करता है उसे अमान्य मान से बचने के लिए बैकग्राउंड करते समय इसे बंद कर देना चाहिए (मैं अपने एप्लिकेशन में कैमरा लॉक बंद कर देता हूं: मैं सभी मामलों को कवर करता हूं) हैंडलर। –

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- लेंसपोजिशन) संभावित पदों की सीमा 0.0 से 1.0 है, 0.0 सबसे छोटी दूरी है जिस पर लेंस फोकस कर सकता है और 1.0 सबसे दूर। ध्यान दें कि 1.0 अनंतता पर ध्यान केंद्रित नहीं करता है। डिफ़ॉल्ट मान 1.0 है। मेरे लिए यह काम करता है – EdiZ

संबंधित मुद्दे

 संबंधित मुद्दे