Превью Android Camera2 растянуто

Sep 13 2020

Я пытаюсь изучить Camera2 API, и я создал простое приложение камеры только для съемки, но проблема, с которой я столкнулся, заключается в том, что предварительный просмотр растянут для некоторых разрешений. Я просмотрел несколько разных сообщений, и все они предположили, что мое соотношение сторон могло быть неправильным, но я использовал рекомендованный Google AutoFitTextureView с правильным соотношением сторон, но мой предварительный просмотр растянут. Я загрузил несколько приложений для камеры с открытым исходным кодом из игрового магазина, и у многих из них была такая же проблема с моей передней камерой (ИСКЛЮЧАЯ ОТКРЫТУЮ КАМЕРУ), но самое забавное то, что я использовал свое приложение на другом устройстве, и предварительный просмотр был абсолютно идеальным. Итак, наконец, я решил протестировать свое приложение с разными разрешениями и наблюдать за результатами, но я не смог найти никакой закономерности, может ли кто-нибудь помочь мне разобраться в этом ???

my device display size is 720x1280
Front camera results: 
SurfaceTexture        AutoFitTextureView         Result
buffer size           size       
2576x1932             720x960                    Normal
2560x1440             720x1280                   Normal
2048x1536             720x960                    Normal
2048x1152             720x1280                   Normal
1920x1920             720x720                    Normal
1920x1080             720x1280                   Normal
1440x1080             720x960                    Horizontally Stretched
1280x720              720x1280                   Horizontally Stretched
1072x1072             720x720                    Normal
960x720               720x960                    Normal
720x480               720x1080                   Horizontally Stretched
640x480               720x960                    Horizontally Stretched
352x288               720x880                    Normal
320x240               720x960                    Normal
256x144               720x1280                   Horizontally Stretched
176x144               720x880                    Normal

Ответы

1 WebDiva Oct 04 2020 at 22:25

Camera2 очень сложно выучить новичку. Подумайте об использовании библиотек камеры, которая делает большинство деталей. Вот лучшее, что я нашел:https://camerakit.io/docs. Это действительно просто, и оно решит все проблемы, с которыми вы сталкиваетесь прямо сейчас.
(Обратите внимание, что мне не принадлежит этот проект и я никоим образом не продвигаю его. Я пробовал API камеры2, и это действительно сложно, поэтому я предложил более простое решение.

EddyTalvala Oct 05 2020 at 07:13

На самом деле возможно, что это ошибка устройства - реализация камеры неправильно масштабируется от полного размера сенсора. Чаще всего это происходит с необычными размерами, которые не используются в большинстве приложений.

В вашем случае, вероятно, 1440x1080 обрабатывается как 1920x1080 какой-то частью конвейера камеры, что приводит к растяжению. Иногда это можно «исправить», добавив второй выход (например, JPEG) с другим разрешением (а иногда даже с тем же).

Конечно, все еще возможно, что в вашем коде (или в AutoFitTextureView) есть логическая ошибка. Но трудно дать полезный совет - это вопрос пошаговой проверки всей компоновки и масштабирования математики.

Вы также можете попробовать официальную библиотеку поддержки камеры Google, CameraX . Он находится в стадии бета-тестирования и отлично подходит для базовых сценариев использования, таких как предварительный просмотр, фотосъемка и анализ изображений.