L'Image enregistrée dans le mauvais sens
Je suis en utilisant ce code:
où dans Manifest
, Activity Orientation
est fixé à Paysage.
Donc, comme son permettant à l'utilisateur de prendre des photos uniquement en mode Paysage, et si la photo est prise en tenant l'appareil en mode portrait, l'image enregistrée est comme ceci:
un angle de 90 ° rotation de l'image.
Après la recherche d'une solution, j'ai trouvé ceci:
Android - aperçu de l'Appareil photo est sur le côté
où la solution est:
dans surfaceChanged()
vérifier
Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
display.getRotation();
et modifier le Caméra displayOrientation en conséquence.
camera.setDisplayOrientation(90);
Mais pas n'importe comment beaucoup de fois j'ai faites pivoter l'appareil, surfaceChanged()
n'est jamais appelé.
J'ai même essayé de l'enlever orientation="Landscape"
dans le Manifest.xml, mais alors l'aperçu lui-même est indiqué sur le côté(peut-être parce que par défaut android.view.SurfaceView
est censé être dans mode Paysage?).
- suivez ce lien, il peut être utile pour vous. stackoverflow.com/questions/5157984/...
- Eh bien, il ya des raisons pourquoi je ne suis plus couvrant ce code dans le livre... 🙂 je l'ai laissé dans le repo pour des raisons historiques, mais il y a certainement des problèmes avec elle. FWIW, je ne plan à revoir ce sujet dans les mois à venir, avec un oeil vers le repassage ce genre de problème, et j'ai fait une note pour enquêter sur cette époque. Cependant, pour l'instant, je n'ai pas de conseils particuliers pour vous, toutes mes excuses.
Vous devez vous connecter pour publier un commentaire.
De l'essayer.
surfaceCreated()
. Plus tard(une fois la prévisualisation est sur) si l'utilisateur modifie l'orientation de l'écran, rien ne se passe et la photo prise sera de côté à nouveau.Depuis que vous avez forcé votre application paysage, votre configuration de l'application ne sont pas modifiées lorsque vous faites pivoter l'appareil, et comme un résultat, votre INTERFACE utilisateur de ne pas redessiner. Donc, vous ne verrez jamais un surfaceCreated/Changé de rappel à cause de cela.
Dans tous les cas, votre problème n'est pas avec aperçu, c'est avec les images capturées.
L'API d'appareil photo n'effectue pas automatiquement de savoir ce qui est en bas; il a besoin de vous dire comment vous voulez que vos images en rotation par l'aide de la Caméra.Paramètres setRotation méthode. Il existe plusieurs systèmes de coordonnées en jeu ici (l'orientation du capteur de la caméra par rapport à votre appareil; l'orientation de votre INTERFACE utilisateur par rapport à l'appareil; et l'orientation de l'appareil par rapport au monde) qui ont à faire correctement.
Donc je vous recommande fortement d'utiliser le code fourni dans la setRotation de la documentation, et d'hériter de la OrientationEventListener, la mise en œuvre de l'auditeur comme suit:
Cette mise à jour de votre appareil photo est toujours l'orientation de l'image correctement, de sorte que le haut est toujours en place, si votre application est en mode paysage ou portrait, ou de votre appareil est d'une tablette ou d'un téléphone.