Camera2: установка SCALER_CROP_REGION приводит к неожиданным результатам при захвате изображения при использовании наимеAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Camera2: установка SCALER_CROP_REGION приводит к неожиданным результатам при захвате изображения при использовании наиме

Сообщение Anonymous »

У меня есть пользовательское действие камеры с использованием API camera2, которое выбирает наименьший доступный выходной размер из:

Код: Выделить всё

    StreamConfigurationMap camMap = currentCamCharacteristics.get(
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
selectedSize = selectSmallestPhotoAndPreviewSize(
camMap.getOutputSizes(ImageFormat.JPEG));
И использует этот размер для предварительного просмотра и захвата.
Это работает нормально, пока я не попытаюсь увеличить/обрезать изображение:

Код: Выделить всё

float maxZoom = currentCamCharacteristics.get(
CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM);
Затем создайте на основе этого область обрезки и примените ее с помощью:

Код: Выделить всё

mPreviewRequestBuilder.set(
CaptureRequest.SCALER_CROP_REGION,
_selectedZoomCropRegion);
Это работает для предварительного просмотра, НО при применении к CaptureRequest.Builder оно, кажется, игнорируется и приводит к возврату крошечного фрагмента ожидаемого изображения (я думаю, верхний левый угол, но трудно подтвердить, так как он настолько размыт) в onImageAvailableListener, поэтому не соответствует изображению предварительного просмотра.
ОДНАКО, я решил посмотреть, что произойдет, если я выберу самый большой доступный выходной размер и сделаю то же самое, и это сработает отлично. К сожалению, для моих целей мне нужны изображения с низким разрешением.
Интересно, сталкивался ли кто-нибудь с этим раньше. Похоже, масштабирование поддерживается не для всех выходных размеров, но не знаю, почему это так и как это проверить. Я тестирую устройства Samsung под управлением Android 14.
ОБНОВЛЕНИЕ:
После долгих экспериментов кажется, что замена этого вызова на более новый версия...:

Код: Выделить всё

captureBuilder.set(CaptureRequest.CONTROL_ZOOM_RATIO, (float)_selectedZoomFactor);
... кажется, работает нормально на имеющихся у меня устройствах Android 14 (даже с низким разрешением), которые, будучи новыми, поддерживают этот вызов. Теперь я попробую протестировать на старых устройствах, чтобы увидеть, будет ли старый вызов установки SCALER_CROP_REGION работать на тех, которые не поддерживают этот новый вызов.

Подробнее здесь: https://stackoverflow.com/questions/789 ... -capture-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»