dispositivo Droid - non ruota immagine catturata dalla fotocamera? (Camera.Parameters)

StackOverflow https://stackoverflow.com/questions/1934378

  •  20-09-2019
  •  | 
  •  

Domanda

Sto usando questo codice fotocamera a chiedere la fotocamera per ruotare l'immagine catturata dati:

Camera.Parameters params = camera.getParameters();
params.set("rotation", 90);
camera.setParameters(params);

questo sembra funzionare su tutti i telefoni, ad eccezione del Droid. Qualcun altro ha visto questo? I dati di immagine è sempre paesaggio, tuttavia, l'applicazione fotocamera nativa sul Droid produce immagini ritratto ok.

Mi chiedo se il Droid rispetterà solo il nuovo metodo Camera.Parameters.setRotation(), ma questo sembra essere disponibile in livello di API 5?

solo
È stato utile?

Soluzione

La rotazione può solo essere memorizzata nell'intestazione exif jpeg come spiegato nel documento setRotation. Su Droid che è effettivamente il caso. È possibile utilizzare JPEG strumenti di lettura intestazione come jhead per verificare questo. È inoltre possibile utilizzare il ExifInterface API di leggere il tag di orientamento nel vostro programma.

Altri suggerimenti

setRotation anche non sembra funzionare per me su Nexus One, ma ho fatto ottenere la rotazione delle immagini a lavorare seguendo l'esempio della Camera android app stessa.
Il codice sorgente è disponibile qui: https://android.googlesource.com/platform/packages/apps/Camera

Inizia con l'Camera.java, ma potrai anche essere guardando ImageManager.java, Util.java, e altri file.

L'idea di base è, si ascolta per le modifiche di orientamento e di catturare ciò che l'orientamento è al momento scattato la foto. Poi, quando si ottiene l'immagine byte nella richiamata, di manipolare l'immagine bitmap, facendo una rotazione sulla bitmap. Poi convertire il bitmap ruotato di nuovo a jpeg. Quando hai finito, avrete dovuto copiare una quantità impressionante di codice dalla applicazione fotocamera solo per questa rotazione.

Il Droid gira Android 2.0 (beh, ora 2.0.1) che sono i livelli di API 5 e 6, rispettivamente.

Quindi è molto probabile che il Droid rispetta solo la (più sensibile) 2.0+ API per la rotazione.

Tuttavia, credo che la vostra preoccupazione è la compatibilità in un'ampia gamma di tipi di dispositivi e versioni del sistema operativo, quindi immagino che avrebbe dovuto richiamare l'API 2.0+ attraverso la riflessione dopo il rilevamento della versione del sistema operativo (usando android.os.Build.VERSION_CODES).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top