2015-10-15 31 views
9

自分のカスタムカメラにタップをフォーカスする機能を実装したいと考えています。 これは、ここで私は、誰もが助けてくださいカメラ2のAPIを実装している場合、私は私の機能 を追加すべきだと思うのコードスニペットは、のGoogle https://github.com/googlesamples/android-Camera2Basicによって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モードをAUTOに設定し、次にAFをトリガーします。 AFを収束させたら(AF_STATUS_FOCUSED_LOCKEDを待つ)、AF_STATE_FOCUSED_LOCKEDを待ってください。しばらくして通常の操作に戻したい場合や、ユーザーがタッチしてピントを合わせない場合は、AFモードをCONTINUOUS_PICTUREに戻してください。

+6

サンプルコードを提供できますか? –

+2

サンプルコードは大きな助けになります。 –

1
  1. オンタッチリスナーを使用して、ユーザーが画面に触れるポイントを取得します。
  2. その位置に基づいてa/some MeteringRectangle(s)を計算します。 CaptureRequest.CONTROL_AF_REGION & CaptureRequest.CONTROL_AE_REGION

  3. は次にCameraMetadata.CONTROL_AE_TRIGGER_START

    にCameraMetadata.CONTROL_AF_TRIGGER_START
  4. にCaptureRequest.CONTROL_AF_MODE_AUTO

  5. CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER

  6. CaptureRequest.CONTROL_AF_TRIGGERCaptureRequest.CONTROL_AF_MODEを設定設定する
  7. 用途この計量矩形をキャプチャ要求を作成する


Hereあなたは完全な例を見つけることができます。


関連する問題