2009-10-22 7 views
3

J'ai posté cela sur les forums de développement Android, mais je voulais atteindre ici.Android 1.6 Rotation de l'appareil photo?

Une des activités dans notre application était de prendre une photo. L'aperçu de l'image montre le chemin correct sur l'écran dans 1.5 & 1.6, mais quand il est enregistré, il sauve le jpg 90 tourné.

Je peux le faire tourner en temps réel lors de l'affichage, et je suppose que je pourrais le réenregistrer une fois enregistré. Mon problème est que je voudrais le sauvegarder correctement lors de la prise de la photo.

Mon application, compilée en 1.5, fonctionne correctement. J'ai eu quelques problèmes de mémoire avec la taille de l'image, ce qui était étrange b/c la taille de l'image a augmenté lors de la prise de photos en prenant une photo w/surfaceholder/imagecapture rappel. Je semble avoir corrigé la ré-affichage de ces images en les redimensionnant en utilisant une matrice bitmapfactory. Mais mon appareil photo tourne maintenant tout 90 degrés. Il semble que mon Override de surfaceChanged ne fait rien, ce qui est où je mettais la rotation à 90 (je ne peux pas rappelez-vous pourquoi, il y a 10 mois!). J'ai essayé de faire tourner les paramètres des paramètres de la caméra à 90 degrés, 0 degrés. Il ne semble pas faire quoi que ce soit ... des pensées?

Répondre

6

Les pilotes de caméra ne connaissent pas l'orientation de l'appareil. Dans 1.5 et 1.6, vous devez appeler parameters.set ("rotation", degree) pour informer les pilotes de la rotation avant d'appeler takePicture(). Dans 2.0, il existe une nouvelle API setRotation (voir ci-dessous). Notez que certains appareils font pivoter l'intégralité des images pour vous et que certains définissent simplement l'orientation dans l'en-tête EXIF.

http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setRotation(int)

Définit l'orientation du dispositif en degrés. Par exemple, supposons que la position naturelle de l'appareil soit le paysage. Si l'utilisateur prend une photo en mode paysage en résolution 2048x1536, la rotation doit être définie sur 0. Si l'utilisateur fait pivoter le téléphone de 90 degrés dans le sens horaire, la rotation doit être définie sur 90. Les applications peuvent utiliser OrientationEventListener pour définir ce paramètre. Le pilote de l'appareil photo peut définir l'orientation dans l'en-tête EXIF ​​sans faire pivoter l'image. Ou le conducteur peut faire pivoter l'image et la vignette EXIF. Si l'image Jpeg est pivotée, l'orientation dans l'en-tête EXIF ​​sera manquante ou 1 (la ligne n ° 0 est en haut et la colonne n ° 0 est à gauche).
Paramètres
rotation L'orientation de l'appareil en degrés. La rotation ne peut être que 0, 90, 180 ou 270

+0

Essayé sur 2.1, mais il ne sauvegarde jamais à l'image. J'ai utilisé Images.Media.insertImage() pour enregistrer le fichier initialement. Je n'ai jamais eu plus de problèmes sur aucune autre plate-forme mobile que j'ai eu sur Android. Ce fut le processus le plus frustrant pour moi. – Brenden