2015-07-11 7 views
6

Mam testowane nowe API Camera2 na Android Lollipop. Chcę sprowadzić obsługiwanego rozmiaru podgląduAndroid Camera2 Rozmiary wyjściowe

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

i maksymalny rozmiar podglądu 1440x1080px na Samsung Galaxy Tab S, który ma rozdzielczość 2560x1600px. Moja wielkość podglądu wynosi 1440 x 1080 pikseli, a rozmiar powierzchni TextureView to 2560 x 1600 pikseli, więc obraz jest zniekształcony.

Przetestowałem stary interfejs API aparatu, który jest przestarzały.

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

i ponad 32 kombinacji kodu zwraca varius o wielkości podglądu, takich jak: 2560x1920, 1920x1080, 1080x1920, 2560x2560 itd. W tym przypadku jestem w stanie wybrać optymalny rozmiar i wyświetli odpowiedni obraz.

Nie wiem, jak wymusić nowy interfejs API, aby uzyskać optymalny rozmiar. Wiem, że rozwiązaniem jest zmiana rozmiaru widoku w dół, który wyświetla podgląd, ale wbudowana aplikacja aparatu działa poprawnie w trybie pełnoekranowym. Z góry dziękujemy za wszelkie sugestie!

+0

"Więc moja previewSize jest 1440x1080px i TextureView wielkość powierzchni jest 2560x1600px więc obraz jest zniekształcony" - to dlatego, że twoje proporcje nie są takie same. Musisz "TextureView" mieć taki sam współczynnik kształtu, jak obrazy z podglądu z kamery, na przykład używając ujemnych marginesów, aby rozmiar był większy niż twój ekran na jednej osi. – CommonsWare

+0

Wiem o tym, ale dlaczego rozmiar podglądu jest tak mały? Na Samsung Galaxy S4 rozmiar podglądu wynosi 1920 x 1080 (taki sam jak rozdzielczość) i nie ma problemu z wyświetlaniem obrazu. – piotrek00

+1

"Wiem o tym, ale dlaczego rozmiar podglądu jest tak mały?" - musiałbyś zapytać Samsunga, podejrzewam. – CommonsWare

Odpowiedz

1

zastąpić

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

do

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

Nie jestem w 100% pewny, ale zapewni to obsługiwany rozmiar przechwytywanych obrazów, a nie podglądu. –

+0

'Rozmiar [] getOutputSizes (klasa klass)' zwraca tylko rozmiary dla formatu obrazu [PRIVATE] (https://developer.android.com/reference/android/graphics/ImageFormat.html#PRIVATE). Niektóre z obsługiwanych klas mogą obsługiwać dodatkowe formaty poza PRIVATE. Na przykład ImageReader obsługuje także YUV_420_888. SurfaceTexture może również akceptować YUV_420_888 lub NV21. –