2011-11-03 20 views
11

Sto cercando di recuperare le dimensioni disponibili per la fotocamera, quindi posso adattare la fotocamera alla mia risoluzione immagine preferita.Dimensioni delle immagini supportate dalla fotocamera Android

Per recuperare la dimensione fotocamera Android Ho usato il seguente codice:

camera=Camera.open(); 
Parameters params = camera.getParameters(); 
List sizes = params.getSupportedPictureSizes(); 
for (int i=0;i<sizes.size();i++){ 
    Log.i("PictureSize", "Supported Size: " +sizes.get(i));   
} 

Questo mi dà il seguente risultato, che io non sono sicuro di come si traducono in una dimensione.

"Supported size: [email protected]" 
"Supported size: [email protected]" 
"Supported size: [email protected]" 
"Supported size: [email protected]" 
"Supported size: [email protected]" 
"Supported size: [email protected]" 

Se qualcuno potesse aiutarmi a capire l'output mi sarebbe di grande aiuto, grazie!

Edit: ho finito per risolvere il mio problema nel modo seguente:

camera=Camera.open(); 
Parameters params = camera.getParameters(); 
List sizes = params.getSupportedPictureSizes(); 
Camera.Size result = null; 
    for (int i=0;i<sizes.size();i++){ 
     result = (Size) sizes.get(i); 
     Log.i("PictureSize", "Supported Size. Width: " + result.width + "height : " + result.height); 
    } 

risposta

11

getSupportedPictureSizes() restituisce un List di Camera.Size oggetti. Camera.Size ha height e width membri dati che indicano l'altezza e la larghezza della dimensione dell'immagine supportata.

Here is a sample project che utilizza il relativo getSupportedPreviewSizes() per trovare la dimensione di anteprima con l'area più grande che è più piccola della dimensione di SurfaceView.

+0

Grazie risolto il mio problema ora. In qualche modo mi ero perso che avrei ottenuto gli oggetti Camera.Size chiamando getSupportedPictureSizes(). Il progetto di esempio è stato grandioso. –

+0

CommonsWare, nel tuo progetto non stai impostando la dimensione dell'immagine - è addirittura necessario impostare le dimensioni dell'immagine che mi chiedo? Perché mi dà seri problemi nel supportare una vasta gamma di dispositivi diversi e mantenere l'anteprima e la dimensione dell'immagine in sincronia e non lasciare che diventino troppo piccoli a causa delle proporzioni. – AgentKnopf

+0

@Zainodis: "nel tuo progetto non stai impostando la dimensione dell'immagine" - quel particolare campione non scatta una foto. Imposta solo l'anteprima. "è anche necessario impostare le dimensioni dell'immagine che mi chiedo?" - è possibile che ci sia un default, ma ne ho sempre impostato uno."Perché mi dà seri problemi nel supportare una vasta gamma di dispositivi diversi e mantenere l'anteprima e la dimensione dell'immagine in sincronia e non lasciarli diventare troppo piccoli a causa delle proporzioni" - Sento il tuo dolore, dato che mi occupo di alcune di queste nella mia libreria di helper CWAC-Camera. – CommonsWare

5
Camera camera = Camera.open(); 
Parameters params = camera.getParameters(); 
List sizes = params.getSupportedPictureSizes(); 
for (int i=0;i<sizes.size();i++) { 
    Log.i("PictureSize", "Supported Size: " +sizes.get(i).width + "height : " + sizes.get(i).height);  
} 

dovete prendere altezza e larghezza da un oggetto dimensione

+0

Non riuscivo a farlo funzionare in quel modo. Alla fine ho deciso di fare quanto segue: Ho dichiarato una variabile per la dimensione della fotocamera, quindi l'ho usata per tenere ogni oggetto e ottenere la larghezza/altezza da quella. Non sono proprio sicuro del motivo per cui non sono in grado di implementarlo come suggerivi tu. –

+0

@krishnabhadra Mi chiedo se il primo elemento delle dimensioni dell'elenco (sizes.get (0)), sia la migliore dimensione dell'immagine fornita dalla fotocamera? o solo una buona dimensione delle foto casuale? –

0

Questo è quello che ho finito per fare. Dal momento che il metodo params.getSupportedPictureSizes() restituisce un elenco di tipo Camera.Size, è stato facile per fare questo:

 List<Camera.Size> sizes = p.getSupportedPictureSizes(); 

     //searches for good picture quality 
     for(Camera.Size dimens : sizes){ 
      if(dimens.width <= 1024 && dimens.height <= 768){ 
       Debug.WriteLine("Width: " + dimens.width + " Height: " + dimens.height); 
       return dimens; 
      } 
     } 

     Debug.WriteLine("Width: " + sizes.get(sizes.size()-1).width + " Height: " + sizes.get(sizes.size()-1).height); 
     //returns the smallest camera size if worst comes to worst 
     return p.getSupportedPictureSizes().get(sizes.size()-1); 

È possibile ottenere un List<Camera.Size> e attraversare come qualsiasi altra lista. l'oggetto Camera.Size ha una proprietà width e height.

Dichiarare il proprio List in questo modo potrebbe essere meglio che trasmettere ogni elemento dell'elenco per digitare Camera.Size all'interno di un ciclo.

Sui miei dispositivi, se guardo a sizes.get(0), avrà la massima risoluzione mentre il sizes.get(sizes.size()-1) ha il valore più basso. Non sono sicuro se questo è vero su tutti i dispositivi, tuttavia. Qualcuno ha idea di ciò?

+1

Sul mio Samsung Galaxy Note II, la dimensione più piccola è l'indice 0, che sale. Quindi non è la stessa su tutti i dispositivi. –

+0

Sì, i telefoni Samsung sono difficili da utilizzare quando si tratta della fotocamera. Ci sono anche altri problemi, come ad esempio il capovolgimento delle immagini (senza interfacce exif). Ho visto persone provare a rilevare se il dispositivo è un dispositivo Samsung ed eseguire funzioni basate su questo. Che dolore, ho ragione? – Nlinscott

+0

Sì, molto triste tutto questo. Soprattutto perché i driver di scrittura dovrebbero far parte del sistema operativo. –

1

Ecco un esempio di come cercare la dimensione che è adiacente alla dimensione massima (1024 * 768) ad esempio.

   List<Camera.Size> sizes = parameters.getSupportedPictureSizes(); 
       //searches for good picture quality 
       Camera.Size bestDimens = null; 
       for(Camera.Size dimens : sizes){ 
        if(dimens.width <= 1024 && dimens.height <= 768){ 
         if (bestDimens == null || (dimens.width > bestDimens.width && dimens.height > bestDimens.height)) { 
          bestDimens = dimens; 
         } 
        } 
       } 
       parameters.setPictureSize(bestDimens.width, bestDimens.height); 
       camera.setParameters(parameters); 
Problemi correlati