Внедрение Tap to Focus в Camera2 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(); } } 

Solutions Collecting From Web of "Внедрение Tap to Focus в Camera2 API"

Вам необходимо настроить область автофокусировки и автоэкспозиции на область, выбранную пользователем.

Ключами являются CONTROL_AF_REGIONS и CONTROL_AE_REGIONS .

Единицы для них находятся в системе координат активного массива датчиков, поэтому вам придется переводить из ваших координат касания пользовательского интерфейса в координаты относительно вашего вида просмотра, а оттуда – в активные координаты массива.

Если соотношение сторон вашего предварительного просмотра совпадает с соотношением сторон датчика, то это прямолинейно; Если нет, вам нужно будет настроить растр, который будет создан для создания вывода предварительного просмотра. Лучшая диаграмма для того, как сейчас работает обрезка. Обратите внимание: если вы также применяете масштабирование, вы также захотите включить коэффициент масштабирования в свои расчеты.

Как только вы вычислили регион, вы, вероятно, захотите настроить режим автофокусировки на AUTO (вместо CONTINUOUS_PICTURE, который обычно используется для обычного предварительного просмотра), а затем запускать AF. Как только вы сходите AF (посмотрите на состояние автофокусировки в результатах захвата, дождитесь AF_STATE_FOCUSED_LOCKED), вы можете сделать снимок, который находится в фокусе. Если вы хотите вернуться к нормальной работе через некоторое время или пользователь отменил касание для фокусировки, переключите режим автофокусировки обратно в режим CONTINUOUS_PICTURE.

  1. Используйте прослушиватель onTouch, чтобы получить точку, в которой пользователь прикасается к экрану.
  2. Вычислите a / some 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. Затем выполните запрос на сборку


Здесь вы можете найти полный пример.