Android の Camera2 API を使って オートフォーカスする


Android の Camera2 API を使って カメラのプレビュー画面を表示する
の続きです。

概要

プレビュー画面をタッチして、その位置に焦点を合わせる。

下記の記事とコードを参考にした。

Camera2フォーカス設定の方法

Basic functionalities of both Camera1 API and Camera2 API with a Google Vision Face Detector added

オートフォーカスをサポートしているか

下記のように、オートフォーカスで使用できる測光領域の最大数
を取得する。
取得した値が1以上ならば、オートフォーカスをサポートしている
Nexus5 では、1です。

reference: CameraCharacteristics.html#CONTROL_MAX_REGIONS_AF

    Integer maxAFRegions = characteristics.get(CameraCharacteristics.CONTROL_MAX_REGIONS_AF);

MeteringRectangle

焦点合せを行う測光領域を示すクラス。

センサのxy座標で表した長方形 (Rectangle) です。

プレビュー画面をタッチした位置をセンサのxy座標に変換する。
プレビュー画面とセンサのxy座標の対応は、下記の記事を参考のこと。

Android の Camera2 API を使って 顔検出する

プレビュー画面とセンサーのxy座標の対応は下図のようになります。

ビュー画面の xy 座標をセンサーの xy 座標に変換する式は下記のようになる。
xy 座標はそれぞれの辺に対する比率

sensorX = viewY
 sensorY = 1- viewX

オートフォーカスを要求する

    MeteringRectangle[] af_regions 
    previewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START);
    previewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO);
    previewRequestBuilder.set(CaptureRequest.CONTROL_AF_REGIONS, af_regions);
    captureSession.capture(previewRequestBuilder.build(), captureCallback, backgroundHandler);

サンプルコードをgithub に公開した。
https://github.com/ohwada/Android_Samples/tree/master/Camera211