Intereting Posts
Как инициировать / отправлять SMS с веб-страницы HTML5 с помощью собственных функций устройств? Изменение навигации Просмотр цвета элемента Динамически Android Android подразумевает намерения VS явно Как работает TranslateAnimation android? Разница между неявными и явными намерениями Виртуальное устройство Android Studio на виртуальной машине Windows 7 не совместимо Скользящее изображение с официальной библиотекой поддержки 23.x. + bottomSheet, как google maps В чем разница между отсоединением фрагмента и его удалением? Начать новую работу и завершить текущий в Android? Учебник по обработке изображений для Android? В чем разница между файлами Acitvity_Main.xml и Fragment_main.xml в Android Studio Веб-сервер для Android Asus Zenfone 5 не обнаружен компьютером В приложении Android toolbar.setTitle не действует – имя приложения отображается как заголовок RecyclerView: получить позицию и переключиться на активность

Андроидная камера растянута в ландшафтном режиме

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

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html

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

Проблема, с которой я сталкиваюсь, заключается в том, что камера держится боком (поэтому я удерживаю Galaxy Tab P1000 в ландшафтном положении), вид растянут.

Чтобы более подробно описать мой сценарий, я использовал точную копию кода, который сделал Google. Его можно найти в файле android-sdk \ samples \ android-8 \ ApiDemos \ src \ com \ example \ android \ apis \ graphics \

Сам файл называется CameraPreview.

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

Введите описание изображения здесь

Введите описание изображения здесь

Я сделал это: я держал вкладку галактики, чтобы сфотографировать объект (ноутбук в этом случае), затем сделал снимок с телефона моей Галактики. В Galaxy у меня есть экран камеры, открытый в приложении, которое я делаю. Это считается для обоих изображений. Один я держу боком и один держись в портретном взгляде. Фотографии немного неясны, но вы можете видеть, что в пейзажной картине камера стала широко широкой.

Solutions Collecting From Web of "Андроидная камера растянута в ландшафтном режиме"

Вчера я столкнулся с такой же проблемой. После исследования источников «Камеры» я нашел причину, по которой растягивается предварительный просмотр камеры.

Причина в том, что соотношение сторон SurfaceView (ширина / высота) ДОЛЖНО быть таким же, как соотношение сторон Camera.Size, используемое в параметрах предварительного просмотра. И если соотношение сторон не одно и то же, у вас растянутое изображение.

Таким образом, самым быстрым решением является установка SurfaceView размером 320px x 240px – наименьший поддерживаемый размер из Parameters.getSupportedPreviewSizes ().

Кроме того, вы можете посмотреть стандартные источники приложения Camera, он использует настраиваемый макет для управления размером SurfaceView (см. Функцию PreviewFrameLayout.java, onMeasure ()).

использование

Git clone https://android.googlesource.com/platform/packages/apps/Camera.git

Для получения источников камеры.

public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub try { camera = Camera.open(); camera.setDisplayOrientation(90); camera.setPreviewDisplay(holder); Camera.Parameters parameters = camera.getParameters(); List<Size> sizes = parameters.getSupportedPictureSizes(); parameters.setPictureSize(sizes.get(0).width, sizes.get(0).height); // mac dinh solution 0 parameters.set("orientation","portrait"); //parameters.setPreviewSize(viewWidth, viewHeight); List<Size> size = parameters.getSupportedPreviewSizes(); parameters.setPreviewSize(size.get(0).width, size.get(0).height); camera.setParameters(parameters); camera.startPreview(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

Вам нужно только getSupportedPreviewSizes() и сохранить его в List :

 List<Size> size = parameters.getSupportedPreviewSizes(); parameters.setPreviewSize(size.get(0).width, size.get(0).height); camera.setParameters(parameters); camera.startPreview(); 

Я надеюсь, это поможет вам.