2015-07-11 4 views
6

Я тестировал новый Camera2 API на Android Lollipop. Я хочу, чтобы принести поддерживаемый размер предварительного просмотра:Android Camera2 Размеры вывода

StreamConfigurationMap streamConfigurationMap = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); 
Size[] sizes = streamConfigurationMap.getOutputSizes(SurfaceTexture.class); 

и максимальный размер предварительного просмотра 1440x1080px на Samsung Galaxy Tab S, который имеет разрешение 2560x1600px. Таким образом, мой размер предварительного просмотра - 1440x1080 пикселей, а размер поверхности TextureView - 2560x1600 пикселей, поэтому изображение искажается.

Я тестировал старый API-интерфейс камеры, который устарел.

Camera.Parameters parameters = camera.getParameters(); 
List<Camera.Size> sizes = parameters.getSupportedPictureSizes(); 

И выше код возвращает 32 комбинаций VariUs размера просмотра, такие как: 2560x1920, 1920x1080, 1080x1920, 2560x2560 и т.д. В этом случае я в состоянии выбрать оптимальный размер и отображать правильное изображение.

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

+0

«Так что мой PreviewSize является 1440x1080px и TextureView размер поверхности 2560x1600px так, что изображение искажено» - это потому, что ваши соотношения сторон не совпадают. Вам нужно, чтобы «TextureView» имел такое же соотношение сторон, что и изображения предварительного просмотра камеры, например, используя отрицательные поля, чтобы размер был больше, чем ваш экран на одной оси. – CommonsWare

+0

Я знаю об этом, но почему размер предварительного просмотра настолько мал? В предварительном просмотре Samsung Galaxy S4 размер изображения 1920 x 1080 (то же самое, что и разрешение), и нет никакой проблемы для отображения изображения. – piotrek00

+1

«Я знаю об этом, но почему размер предварительного просмотра настолько мал?» - вам, наверное, придется спросить у Samsung. – CommonsWare

ответ

1

заменить

Size[] sizes = streamConfigurationMap.getOutputSizes(SurfaceTexture.class); 

в

Size[] sizes = streamConfigurationMap.getOutputSizes(ImageFormat.JPEG) 
+0

Я не уверен на 100%, но это даст вам поддерживаемый размер для неподвижных захватов, а не для предварительного просмотра. –

+0

'Size [] getOutputSizes (класс klass)' только возвращает размеры для формата [ЧАСТНОГО] (https://developer.android.com/reference/android/graphics/ImageFormat.html#PRIVATE). Некоторые поддерживаемые классы могут поддерживать дополнительные форматы за пределами PRIVATE. Например, ImageReader также поддерживает YUV_420_888. SurfaceTexture может принимать YUV_420_888 или NV21. –

Смежные вопросы