2009-12-19 7 views
1

J'utilise ce code de la caméra pour demander à l'appareil photo pour faire pivoter les données d'image capturée:Appareil Droid - ne fait pas pivoter l'image capturée par l'appareil photo? (Camera.Parameters)

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

cela semble fonctionner sur tous les téléphones, à l'exception du Droid. Quelqu'un d'autre a-t-il vu cela? Les données d'image sont toujours paysage, cependant, l'application de la caméra native sur le Droid produit des images de portrait ok.

Je me demande si le Droid ne respectera que la nouvelle méthode Camera.Parameters.setRotation(), mais cela ne semble être disponible qu'au niveau API 5?

Répondre

0

La rotation peut simplement être stockée dans l'en-tête jpeg exif comme expliqué dans le document setRotation. Sur Droid c'est vraiment le cas. Vous pouvez utiliser des outils de lecture d'en-tête jpeg comme jhead pour le vérifier. Vous pouvez également utiliser le ExifInterface API pour lire le tag d'orientation dans votre programme.

+0

essayé d'utiliser l'API pour exif, mais n'a pas été en mesure d'enregistrer les modifications. Je ne peux pas obtenir de rotation pour travailler sur des photos d'appareil photo. Très irritant. – Brenden

0

Le Droid tourne sous Android 2.0 (bien, maintenant 2.0.1) qui sont les niveaux API 5 et 6, respectivement.

Il est donc tout à fait possible que le Droid ne respecte que l'API 2.0+ (plus sensée) pour la rotation. Cependant, je suppose que votre souci est la compatibilité entre une gamme de types d'appareils et de versions d'OS, donc j'imagine que vous devriez invoquer l'API 2.0+ par réflexion après avoir détecté la version du système d'exploitation (en utilisant android.os.Build.VERSION_CODES).

+0

Oh wow cela ne semble pas agréable - devrais-je plutôt commencer à utiliser l'API 2.0 (ressemble au niveau 6), et si je vois API <6, alors utiliser cet appel de paramètres à la place? Je ne sais pas si je pourrais aller dans l'autre sens? Merci – Mark

2

setRotation ne semblait pas fonctionner pour moi sur Nexus One, mais j'ai réussi à faire tourner l'image en suivant l'exemple de l'application android Camera elle-même.
Le code source est disponible ici: https://android.googlesource.com/platform/packages/apps/Camera

Démarrer avec le Camera.java, mais vous penchera également sur la ImageManager.java, Util.java, et d'autres fichiers. L'idée de base est, vous écoutez les changements d'orientation et capturez quelle est l'orientation au moment où vous avez pris l'image. Ensuite, lorsque vous obtenez les octets image dans le rappel, vous manipulez le bitmap, en effectuant une rotation sur le bitmap. Puis convertissez le bitmap pivoté en jpeg. Lorsque vous avez terminé, vous avez dû copier une quantité choquante de code de l'application de l'appareil photo juste pour cette rotation.