L'anteprima di Android Camera2 è allungata

Sep 13 2020

Sto cercando di imparare l'API Camera2 e ho creato una semplice app per fotocamera solo per scattare foto, ma il problema che sto affrontando è che l'anteprima è allungata per alcune risoluzioni. Ho esaminato una serie di post diversi e tutti hanno suggerito che le mie proporzioni potrebbero essere sbagliate, ma ho usato AutoFitTextureView consigliato da Google con le proporzioni corrette, ma la mia anteprima è allungata. Ho scaricato alcune app per fotocamere open source dal Playstore e molte di esse hanno anche avuto lo stesso problema con la mia fotocamera anteriore (TRANNE FOTOCAMERA APERTA) ma la parte divertente è che ho usato la mia stessa app su un altro dispositivo e l'anteprima era assolutamente perfetta. Alla fine ho deciso di testare la mia app con diverse risoluzioni e osservare i risultati, ma non sono riuscito a trovare alcun modello, qualcuno può aiutarmi a capirlo ???

my device display size is 720x1280
Front camera results: 
SurfaceTexture        AutoFitTextureView         Result
buffer size           size       
2576x1932             720x960                    Normal
2560x1440             720x1280                   Normal
2048x1536             720x960                    Normal
2048x1152             720x1280                   Normal
1920x1920             720x720                    Normal
1920x1080             720x1280                   Normal
1440x1080             720x960                    Horizontally Stretched
1280x720              720x1280                   Horizontally Stretched
1072x1072             720x720                    Normal
960x720               720x960                    Normal
720x480               720x1080                   Horizontally Stretched
640x480               720x960                    Horizontally Stretched
352x288               720x880                    Normal
320x240               720x960                    Normal
256x144               720x1280                   Horizontally Stretched
176x144               720x880                    Normal

Risposte

1 WebDiva Oct 04 2020 at 22:25

Camera2 è molto difficile da imparare come principiante. Prendi in considerazione l'utilizzo di librerie di fotocamere che eseguono la maggior parte delle parti. Eccone uno che è il migliore che ho trovato:https://camerakit.io/docs. È davvero facile e si prenderà cura di tutti i problemi che stai affrontando in questo momento.
(Nota che non possiedo questo progetto e non lo sto promuovendo comunque. Ho provato l'API camera2 ed è davvero difficile, motivo per cui ho suggerito una soluzione più semplice.

EddyTalvala Oct 05 2020 at 07:13

In realtà è possibile che si tratti di un bug del dispositivo: l'implementazione della fotocamera viene ridimensionata in modo errato rispetto alle dimensioni complete del sensore. Succede più comunemente a dimensioni insolite che la maggior parte delle app non utilizza.

Nel tuo caso, è probabile che 1440x1080 venga trattato come 1920x1080 da una parte della pipeline della telecamera, con conseguente allungamento. A volte questo può essere "risolto" aggiungendo un secondo output (JPEG per esempio) con una risoluzione diversa (o anche la stessa, a volte).

Ovviamente, è ancora possibile che tu abbia un bug logico nel tuo codice (o in AutoFitTextureView). Ma per quelli è difficile dare consigli utili: si tratta di controllare tutto il layout e ridimensionare la matematica passo dopo passo.

Puoi anche provare la libreria ufficiale di supporto per le fotocamere di Google, CameraX . È in versione beta e funziona bene per casi d'uso di base come anteprima, acquisizione di immagini fisse e analisi delle immagini.