Превью Android Camera2 растянуто
Я пытаюсь изучить 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
Ответы
Camera2 очень сложно выучить новичку. Подумайте об использовании библиотек камеры, которая делает большинство деталей. Вот лучшее, что я нашел:https://camerakit.io/docs. Это действительно просто, и оно решит все проблемы, с которыми вы сталкиваетесь прямо сейчас.
(Обратите внимание, что мне не принадлежит этот проект и я никоим образом не продвигаю его. Я пробовал API камеры2, и это действительно сложно, поэтому я предложил более простое решение.
На самом деле возможно, что это ошибка устройства - реализация камеры неправильно масштабируется от полного размера сенсора. Чаще всего это происходит с необычными размерами, которые не используются в большинстве приложений.
В вашем случае, вероятно, 1440x1080 обрабатывается как 1920x1080 какой-то частью конвейера камеры, что приводит к растяжению. Иногда это можно «исправить», добавив второй выход (например, JPEG) с другим разрешением (а иногда даже с тем же).
Конечно, все еще возможно, что в вашем коде (или в AutoFitTextureView) есть логическая ошибка. Но трудно дать полезный совет - это вопрос пошаговой проверки всей компоновки и масштабирования математики.
Вы также можете попробовать официальную библиотеку поддержки камеры Google, CameraX . Он находится в стадии бета-тестирования и отлично подходит для базовых сценариев использования, таких как предварительный просмотр, фотосъемка и анализ изображений.