2015-10-15 76 views
9

把重點我想實現觸摸對焦功能,在我的自定義相機。 這是谷歌https://github.com/googlesamples/android-Camera2Basic實施輕按Camera2 API

提供的基本代碼下面的代碼片段在那裏我覺得我應該加入我的特點 如果有人已經實現了Camera2 API,請幫助!

private void lockFocus() { 
    try { 
     // This is how to tell the camera to lock focus. 
     mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, 
       CameraMetadata.CONTROL_AF_TRIGGER_START); 
     // Tell #mCaptureCallback to wait for the lock. 
     mState = STATE_WAITING_LOCK; 
     mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback, 
       mBackgroundHandler); 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 
} 

回答

12

您需要將自動對焦和自動曝光區域設置爲用戶點擊的區域。

的關鍵是CONTROL_AF_REGIONSCONTROL_AE_REGIONS

它們的單位在傳感器active array coordinate system中,因此您必須從UI觸摸座標轉換爲相對於預覽視圖的座標,並從那裏到有效數組座標。

如果預覽的縱橫比相匹配,該傳感器的,那麼這是簡單的;如果不是,則必須調整創建預覽輸出的裁剪。目前種植作物的最佳圖表是here。請注意,如果您也正在應用縮放,則還需要在計算中包含縮放比例。

一旦你計算出的區域,你可能會想設定自動對焦模式爲自動(而不是CONTINUOUS_PICTURE這通常是用於正常預覽),然後觸發自動對焦。一旦你收斂AF(看看在捕獲結果的AF狀態,等待AF_STATE_FOCUSED_LOCKED),那麼你就可以拍攝一張照片這是關注的焦點。如果您想在一段時間後恢復正常操作,或者用戶取消觸摸進行對焦,請將AF模式切換回CONTINUOUS_PICTURE。

+6

您能否提供樣片代碼? –

+2

示例代碼將是一個很大的幫助。 –

1
  1. 使用onTouch偵聽器獲取用戶觸摸屏幕的位置。
  2. 計算一個/一些MeteringRectangle(s)基於這一立場。
  3. 使用這種測光矩形設置CaptureRequest.CONTROL_AF_REGION & CaptureRequest.CONTROL_AE_REGION

  4. 設置CaptureRequest.CONTROL_AF_MODE到CaptureRequest.CONTROL_AF_MODE_AUTO

  5. CaptureRequest.CONTROL_AF_TRIGGER到CameraMetadata.CONTROL_AF_TRIGGER_START
  6. CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER到CameraMetadata.CONTROL_AE_TRIGGER_START

  7. 然後構建捕獲請求


Here你可以找到一個完整的例子。