2011-09-22 85 views
0

自從幾天以來,我一直在爲我的應用程序使用CAMERA模塊。 我已經定製完整的相機模塊,而不是通過意圖調用硬件內置移動相機。我已經使用了快門,圖片等回調 現在我試圖將ZOOM和AUTO-FOCUS功能添加到此自定義相機。任何人都可以讓我知道如何添加ZOOM和AUTO-FOCUS功能以及清單文件中應該提及的所需權限..希望我能夠儘快得到幫助。我的Android應用程序的「相機」模塊的「自動聚焦」功能

回答

3

對於變焦(2×):

Camera.Parameters parameters = camera.getParameters(); 
    parameters.set("zoom", "2.0"); 
    parameters.set("taking-picture-zoom", "20"); 

對於API級別> 5使用該API的像setZoom()

對於autofocussing(從斑馬線截取)

public final boolean onKeyDown(int keyCode, KeyEvent event) { 

synchronized(this) { 
if (!bIsPictureTaking) { 

    if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_CAMERA) { 

      if (!bIsPictureTaking && !bIsAutoFocusStarted){ 

       YourAutoFocusCallback autoFocusCallBack = new YourAutoFocusCallback(); 

       camera.autoFocus(autoFocusCallBack); 

final class YourAutoFocusCallback implements Camera.AutoFocusCallback { 


    private static final long AUTOFOCUS_INTERVAL_MS = 1500L; 

    private final CameraConfigurationManager configManager; 
    private boolean reinitCamera; 
    private Handler autoFocusHandler; 
    private int autoFocusMessage; 

    AutoFocusCallback(CameraConfigurationManager configManager) { 
    this.configManager = configManager; 
    } 

    void setHandler(Handler autoFocusHandler, int autoFocusMessage) { 
    this.autoFocusHandler = autoFocusHandler; 
    this.autoFocusMessage = autoFocusMessage; 
    } 

    public void onAutoFocus(boolean success, Camera camera) { 
    if (autoFocusHandler != null) { 
     Message message = autoFocusHandler.obtainMessage(autoFocusMessage, success); 
     autoFocusHandler.sendMessageDelayed(message, AUTOFOCUS_INTERVAL_MS); 
     autoFocusHandler = null; 

     configManager.setDesiredCameraParameters(camera); 
    } else { 
    } 
    } 

} 
+0

我是否正確假設我不需要C'ameraConfigurationManager'如果我'setParameters' surfaceChanged以及如何創建/傳遞Handler使用setHandler.My焦點代碼是[here](http://pastebin.com/RDHMsn43) 。我必須按住ShutterButton幾秒鐘以便相機進行對焦,然後才能拍攝照片。在Thread/AsyncTask中放置PictureCallback代碼並沒有幫助。我借用了ShutterButton的代碼[https://android.googlesource.com/platform/packages/apps/Camera/+/gingerbread/src/com/android/camera/ShutterButton.java]。 – vamsiampolu

6

夫婦的觀察從我的結尾。

1)Camera.autoFocus是一次性的號召,在適用時 Camera.getParameters.getFocusMode()要麼FOCUS-MODE-AUTOFOCUS-MODE-MACRO,在其他情況下,你不需要調用 autoFocus方法。查看API文檔並忠實地關注它們。

2)通過一次呼叫時,它意味着此方法不登記 AutoFocusCallback實例來連續接收通知。

3)相反,FOCUS-MODE-AUTO甚至不是一個動態和連續的焦點 不變。相反,您可能希望使用FOCUS-MODE-EDOFFOCUS-MODE-CONTINUOUS-PICTURES,具體取決於您正在使用和構建的API級別和 SDK版本。

4)種種 可能性,實際的設備攝像頭可能不支持某些 FOCUS-MODE常量,如EDOFINFINITE。在創建攝像機參數時務必確保 ,您檢查 getSupportedFocusModes並使用適用的常量。

5)調用 camera.autoFocus之前camera.takePicture可以臃腫的 導致PictureCallBack至至少50% 更JPEG-字節數組比它的原始尺寸。不明確地調用autoFocus()可能會導致以前的autoFocus()以非常低的分辨率結束,這可能導致jpeg字節數組長度僅爲012KB,因此會導致BitmapFactory中的空圖像位圖。

6)關於自動對焦權限,請參閱API文檔。

7)關於 變焦,它並不像實現自動對焦功能 一樣複雜。根據屏幕上的互動,如滑塊,或者硬件 鍵如音量鍵,你可以實現一個ZoomChangeListener ,你可以用Camera儘快Camera實例 從open(int cameraId)收到註冊。

+0

非常感謝您的時間和精力 – swiftBoy

相關問題