Android の Camera2 API を使って カメラのプレビュー画面を表示する
の続きです。
概要
プレビュー画面をタッチして、その位置に焦点を合わせる。
下記の記事とコードを参考にした。
[Basic functionalities of both Camera1 API and Camera2 API with a Google Vision Face Detector added]
(https://github.com/EzequielAdrianM/Camera2Vision)
オートフォーカスをサポートしているか
下記のように、オートフォーカスで使用できる測光領域の最大数
を取得する。
取得した値が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