Получите окончательное разрешение CameraX

Только что создал предварительный просмотр камеры в Android с помощью CameraX со следующей конфигурацией:

    PreviewConfig previewConfig = new PreviewConfig.Builder()
            .setLensFacing(CameraX.LensFacing.FRONT)
            .setTargetResolution(new Size(720, 720))
            .build();
    Preview preview = new Preview(previewConfig);

Теперь проблема в том, что такое целевое разрешение может быть недоступно, и в этом случае предварительный просмотр выберет разрешение, близкое к запрошенному. Я спрашиваю здесь способ узнать, какое разрешение было эффективно выбрано при предварительном просмотре.

Заранее спасибо!


person Fran Marzoa    schedule 12.09.2019    source источник


Ответы (2)


На самом деле это возможно. Я узнал после небольшого копания исходного кода, что после вызова bindToLifecycle на вашем cameraProvider:

camera = cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, previewUseCase, imageCaptureUseCase, analyzerUseCase)

Вы сможете получить разрешение, выбранное для каждого применимого сценария использования:

val captureSize = imageCaptureUseCase.attachedSurfaceResolution ?: Size(0, 0)
val previewSize = previewUseCase.attachedSurfaceResolution ?: Size(0, 0)

Надеюсь это поможет

person Marcin Bak    schedule 17.05.2020
comment
Спасибо, Марчин, мне это пригодится, когда я обновлю зависимости своего проекта. Надеюсь, это будет полезно и @Dmytro Batyuk. - person Fran Marzoa; 18.05.2020
comment
attachedSurfaceResolution сейчас ограничена библиотекой, мы можем использовать ее для подавления предупреждения, но, вероятно, нам следует запросить новый общедоступный API - person MatPag; 18.03.2021

Хорошо, я нашел решение.

    preview.setOnPreviewOutputUpdateListener(new Preview.OnPreviewOutputUpdateListener() {
        @Override
        public void onUpdated(Preview.PreviewOutput output) {
             ...
             Size resolution = output.getTextureSize();
             ...
        }
    });
person Fran Marzoa    schedule 12.09.2019
comment
К сожалению, CameraX больше не предоставляет такого API. Я пока не нашел альтернативы - person Dmytro Batyuk; 14.05.2020
comment
@DmytroBatyuk Мне очень жаль это слышать. Я надеюсь, что они добавят что-то в следующей версии или улучшат документацию, объясняя, как можно делать такие вещи, которые должны быть довольно распространенными. - person Fran Marzoa; 15.05.2020
comment
Н.П., только что упомянул об этом для других людей, которые также ищут что-то подобное, чтобы сэкономить свое время. - person Dmytro Batyuk; 15.05.2020
comment
@DmytroBatyuk, пожалуйста, проверьте мой ответ. Я нашел способ получить окончательное разрешение. - person Marcin Bak; 18.05.2020