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

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

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(); 

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