2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-06-01

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

概要

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

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

Camera2フォーカス設定の方法

[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座標の対応は下図のようになります。
correspondence_xy_coordinates_of_camera_sensor_and_view.png

ビュー画面の 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

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?