2015-07-11 12 views
6

Ho testato la nuova API Camera2 su Android Lollipop. Voglio prendere supportato dimensione anteprima:Android Camera2 Dimensioni output

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

e la dimensione massima di anteprima è 1440x1080px su Samsung Galaxy Tab S che ha 2560x1600px risoluzione. Quindi la mia previewSize è 1440x1080px e la dimensione della superficie di TextureView è 2560x1600px quindi l'immagine è distorta.

Ho testato la vecchia API della telecamera che è obsoleta.

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

E il codice precedente restituisce 32 combinazioni di dimensioni varius anteprima quali: 2560x1920, 1920x1080, 1080x1920, 2560x2560 ecc In questo caso sono in grado di scegliere le dimensioni ottimali e visualizzare l'immagine corretta.

Non so come forzare la nuova API per ottenere la dimensione ottimale. So che la soluzione è ridimensionare la vista in basso che mostra l'anteprima, ma l'app per fotocamera integrata funziona correttamente in modalità schermo intero. Grazie in anticipo per tutti i suggerimenti!

+0

"Quindi il mio previewSize è 1440x1080px e TextureView dimensioni superficie è 2560x1600px così immagine è distorta" - che è perché le tue proporzioni non sono gli stessi. Devi fare in modo che 'TextureView' abbia le stesse proporzioni delle immagini di anteprima della fotocamera, come usare margini negativi per ridimensionarlo più grande dello schermo su un asse. – CommonsWare

+0

Lo so, ma perché le dimensioni dell'anteprima sono così piccole? Sulle dimensioni di anteprima di Samsung Galaxy S4 è 1920 x 1080 (lo stesso della risoluzione) e non vi è alcun problema per visualizzare l'immagine. – piotrek00

+1

"Lo so, ma perché le dimensioni dell'anteprima sono così piccole?" - Dovresti chiedere a Samsung, sospetto. – CommonsWare

risposta

1

sostituire

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

a

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

Non sono sicuro al 100%, ma questo ti darà la dimensione supportata per le acquisizioni, non per l'anteprima. –

+0

'Dimensione [] getOutputSizes (Classe klass)' restituisce solo le dimensioni per il formato immagine [PRIVATO] (https://developer.android.com/reference/android/graphics/ImageFormat.html#PRIVATE). Alcune delle classi supportate possono supportare formati aggiuntivi oltre PRIVATE. Ad esempio, ImageReader supporta anche YUV_420_888. SurfaceTexture può accettare anche YUV_420_888 o NV21. –

Problemi correlati