Je construis une application qui utilise un appareil photo pour prendre des photos. Voici mon code source pour cela:
File file = new File(Environment.getExternalStorageDirectory(),
imageFileName);
imageFilePath = file.getPath();
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
//Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(intent, ACTIVITY_NATIVE_CAMERA_AQUIRE);
Sur la onActivityResult()
méthode, j'utilise BitmapFactory.decodeStream()
pour ramasser l'image.
Lorsque j'exécute mon application sur Nexus one, elle fonctionne bien. Mais lorsque je cours sur Samsung Galaxy S ou HTC Inspire 4G, la direction de l'image n'est pas correcte.
- Capturez avec le mode portrait, l'image réelle (enregistrer sur la carte SD) tourne toujours à 90 degrés.
Aperçu de l'image après la prise de vue --------- Image réelle sur la carte SD
- Capturez avec le mode paysage, tout va bien.
Aperçu de l'image après la prise de vue --------- Image réelle sur la carte SD
android
orientation
android-camera-intent
Nguyen Minh Binh
la source
la source
Réponses:
Il y a pas mal de sujets et de problèmes similaires ici. Puisque vous n'écrivez pas votre propre appareil photo, je pense que cela se résume à ceci:
certains appareils font pivoter l'image avant de l'enregistrer, tandis que d'autres ajoutent simplement la balise d'orientation dans les données exif de la photo.
Je recommanderais de vérifier les données exif de la photo et de rechercher en particulier
Étant donné que la photo s'affiche correctement dans votre application, je ne sais pas où se trouve le problème, mais cela devrait certainement vous mettre sur la bonne voie!
la source
Je viens de rencontrer le même problème et je l'ai utilisé pour corriger l'orientation:
Si la largeur du Bitmap est supérieure à la hauteur, l'image renvoyée est en paysage, je la fais donc pivoter de 90 degrés.
J'espère que cela aide quelqu'un d'autre avec ce problème.
la source
Deux choses sont nécessaires:
L'aperçu de l'appareil photo doit être identique à votre rotation. Réglez ceci par
camera.setDisplayOrientation(result);
Enregistrez l'image capturée comme aperçu de votre appareil photo. Faites-le via
Camera.Parameters
.J'espère que cela pourra aider.
la source
parameters.setRotation(result)
quel , nous pourrions simplement dire non?la source
Une autre option consiste à faire pivoter le bitmap dans l'écran de résultats comme ceci:
la source
J'ai également ce type de problème pour certains appareils:
la source
Essayez de cette manière: Uri statique image_uri; Bitmap statique prise_image = null;
}
la source
Plus besoin de vérifier les données exif de la photo. Allez-y doucement avec Glide .
Google nous a présenté une bibliothèque Image Loader pour Android développée par bumptech appelée Glide en tant que bibliothèque recommandée par Google. Il a été utilisé dans de nombreux projets open source Google jusqu'à présent, y compris l'application officielle Google I / O 2014.
Ex: Glide.with (contexte) .load (uri) .into (imageview);
Pour en savoir plus: https://github.com/bumptech/glide
la source
J'espère que cela aidera !! Merci
la source
J'espère que cela vous aidera, merci!
la source
Rencontrez simplement le même problème ici, l'extrait de code ci-dessous fonctionne pour moi:
j'espère que cela aide :)
la source
Essayez ceci dans le callback surfaceChanged:
la source
// clic sur le bouton
// Méthode onActivityResult
// créer un chemin de fichier de classe
classe publique FilePath {
}
la source
Le code est fonctionnellement pour le paysage et le portrait @frontCameraID = variable obtenu la méthode classique pour montrer la caméra voulue
Méthode pour obtenir l'orientation y rotation pour enregistrer l'image et afficher l'orientation @result = orientation sur la vue d'aperçu de la caméra @rotationPicture = rotation nécessaire pour enregistrer correctement l'image
Quelqu'un a une question sur le code, veuillez me le dire.
la source
deux solutions One line utilisant Picasso et la bibliothèque glide
Après avoir passé beaucoup de temps avec de nombreuses solutions au problème de rotation d'image, j'ai finalement trouvé deux solutions simples. Nous n'avons pas besoin de faire de travaux supplémentaires. Picasso et Glide sont une bibliothèque très puissante pour la gestion des images dans votre application inclut. Il lit les données EXIF de l'image et fait pivoter automatiquement les images.
Utilisation de la bibliothèque glide https://github.com/bumptech/glide
Utilisation de la bibliothèque Picasso https://github.com/square/picasso
la source