Intereting Posts
Каков наиболее подходящий способ хранения пользовательских настроек в приложении Android Создание бесконечно прокручиваемого календарного вида в Android Одновременное чтение и запись SQLite Ошибка входа в API Facebook с помощью приложения FB, установленного на телефоне ADB не признает Nexus 4 – больше советов Ошибка установки Google Play -505 Firebase 2.0 – как бороться с несколькими вкусами (средами) приложения Android? ProGuard – org.codehaus.jackson.map.JsonMappingException: подходящий конструктор не найден для типа Что произойдет, если startActivity () вызывается в уже созданную активность? Как изменить шрифт в виджетах Android на пользовательские шрифты в папке «активы» приложения? Android – рендеринг одного и того же видео в нескольких представлениях Android: Как разрешить соединение с API Google не удается из Сервиса? Как включить WebKitDeveloperExtras в Android-приложении Android Как переключиться с по умолчанию ConstraintLayout на RelativeLayout в Android Studio 2.3.3 Html.fromHtml устарел в Android N

Внедрение 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. Затем выполните запрос на сборку


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