Est Android CameraInfo.l'orientation correctement documentées? Incorrectement mis en œuvre?
Dans Android, vous pouvez obtenir une description des propriétés d'un Camera
par la récupération d'un CameraInfo
. Je suis intéressé dans l'orientation, comme décrit à http://developer.android.com/reference/android/hardware/Camera.CameraInfo.html#orientation
Toutefois, la documentation semble incompatible avec la façon dont tous les quatre de mes appareils se comportent, et, j'ai des nouvelles d'un cinquième périphérique pour lequel cette convenable fixe les changements de la valeur.
En particulier, la documentation dit:
La valeur de l'angle que l'image de la caméra doit être tourné
dans le sens horaire de sorte qu'il affiche correctement sur l'écran dans son environnement naturel
de l'orientation. ... Par exemple, supposons qu'un appareil a naturellement de haut
de l'écran. L'arrière face à la caméra capteur est monté dans le paysage. Vous êtes
en regardant l'écran. Si le côté supérieur du capteur de la caméra est aligné
avec le bord droit de l'écran en orientation naturelle, la valeur
90. Si le côté supérieur d'un appareil photo de face du capteur est
aligné avec la droite de l'écran, la valeur doit être de 270.
Mais dans l'déclaré exemple, c'est l'image de la caméra qui est tourné de 90 degrés dans le sens horaire par rapport à l'naturellement tall orientation, et non pas l'inverse. C'est, à l'image, dont le sommet est aligné avec le côté droit de l'appareil, les besoins de 270 degrés de rotation dans le sens horaire pour aligner avec le côté supérieur de l'appareil.
Au moins, tous les quatre de mes périphériques rapport "90" pour cette valeur, et agissent comme si la caméra est en haut est le côté droit de l'appareil lorsqu'on le tient en orientation naturelle. Cela signifie que l'image doit être une rotation de 270 degrés dans le sens horaire, pas 90, pour correspondre à l'orientation naturelle. L'exemple semble correcte; la première ligne ne fonctionne pas.
Cette exemple de code semble à l'appui de ma conclusion à laquelle il ne donne le bon résultat lors de l'orientation est interprétée comme ci-dessus.
Étrangement, j'ai du journal des preuves à partir d'un périphérique de l'utilisateur qu'il montre cette déclaration de valeur comme 90 à la fois, et de 0 à d'autres moments! Il devrait être une propriété physique de la façon dont la caméra est installée dans l'appareil, à droite?
- Quelqu'un peut confirmer que la première ligne de la documentation est en fait faux, et que l'exemple est le droit?
- Quelqu'un a observé une évolution de la valeur de
CameraInfo.orientation
? Est-il prouvé dans les docs que c'est légal, comportement, ou est-il susceptible d'un bug dans l'appareil? - D'autres observations, des expériences, des pièges, j'ai pas encore?
Vous devez vous connecter pour publier un commentaire.
Vous avez examinés de manière approfondie ce déjà dans votre réponse, merci pour le suivi explication!
Alors que je peux facilement imaginer ce à un bogue dans le principe, il s'agirait toujours d'une assez sévère affectant toutes sortes d'imagerie liées apps résultant de l'information incorporée par les EXIF des photos par exemple (d'autres EXIF des bogues de côté pour un moment).
Ainsi, je considère qu'il est plus probable d'une fonctionnalité de l'un de ces milliers de terminaux Android là-bas, c'est à dire un appareil photo avec une option physiquement rotation de la lentille. Alors que je ne suis pas au courant d'un smartphone fonctionnant sous Android actuellement, il y tels téléphones disponibles, par exemple le LG VX7000 (~2004) ou le Samsung SCH-a930 (~2006) (voir, par exemple, Rotation de la Caméra Lentille dans le manuel), donc je ne vais pas être surpris si quelque chose comme cela apparaît dans l'Android domaine.
D'ailleurs, il y a une question sans réponse Pourquoi mes photos à l'envers ou à l'envers. dans Questions des clients & Réponses pour Samsung SCH-A930 à propos de ces derniers:
Cela pourrait effectivement être un bug dans l'autre fonctionnement réglage de rotation hardware/firmware 😉
Donc, en conclusion, je pense qu'il serait préférable de le préparer pour l'orientation de pouvoir changer jusqu'à ce que vous avez plus précises des éléments de preuve pour que ce soit un buggy périphérique en effet.
Je crois que j'ai répondu à ma propre question ici, après quelques réflexions.
L'exemple est correct. Et, le texte est correct en fait. Dans l'exemple donné, si les données d'aperçu est affiché sur l'écran, il apparaîtra une rotation de 90 degrés contredes aiguilles d'une montre, depuis le "haut" dans les données à l'écran dans la main droite, et il est indiqué sur l'affichage, dont le "up" est à la main gauche, pour ainsi dire. Donc, il serait nécessaire de compenser par la rotation de données de l'image de 90 degrés dans le sens des aiguilles avant de les afficher.
Je pense que c'est plus naturel pour comprendre cette figure que la rotation de l'appareil photo est monté par rapport à l'orientation naturelle.
C'est pour ces raisons et d'autres, j'en ai conclu que le dispositif qui montre une évolution de la valeur pour l'orientation est tout simplement buggy. Au moins, quand il rapporte 0, ses données agit comme "90" est la bonne valeur.
Une autre façon de traiter le problème est de s'étend OrientationEventListener
et remplacer la méthode onOrientationChanged vous obtiendrez l'orientation de votre téléphone même la rotation automatique désactivé(parce que l'auditeur émettent de la rotation de l'événement via le capteur).
vous devez activer et désactiver l'orientation de l'auditeur sur onResume/onPause pour empêcher certains de vidange de la batterie.
merci pour la commune de la-jura pour la solution