J'essaie de simplement prendre une photo et de le présenter dans une vision d'image avec mon Samsung Galaxy S. ça marche bien quand je le fais sur le paysage mais } p> J'ai juste besoin d'un code qui fonctionne (sur n'importe quel appareil) ou d'une solution à mon code ...
THX. p> p>
4 Réponses :
Je peux seulement suggérer un hack pour ce problème. Enregistrez vos résultats dans des préférences partagées dans OnActiVIVIVIVIVIVITURE () CODE> et pendant
Oncreate code> Chargez votre contenu à partir de préférences partagées. Je sais que c'est une mauvaise solution, mais cela vous permettra de continuer jusqu'à ce que vous trouviez une meilleure réponse. Et n'oubliez pas d'effacer vos préférences partagées une fois que vous avez terminé, votre activité initialisera toujours avec les anciennes données. P>
La raison pour laquelle Une solution à ce problème consiste à définir le manifeste pour ignorer les modifications apportées au changement d'orientation, vous pouvez le faire en utilisant ceci: p> Si vous utilisez API Démarrage avec le niveau 13, vous pouvez envisager oncreate () code> est appelé est parce que lorsque vous appelez l'activité de la caméra pendant l'orientation portrait, cela changera l'orientation et détruisez votre activité précédente. Après avoir terminé le
OnActivityResult () Code>, votre activité sera ré-créée.
ScreenSize code> pour le manifeste des configchanges. P> P>
Essayez le code suivant .. Cela a fonctionné pour moi avec Samsung Galaxy S2 Insérer le code suivant dans OnActivityResult ()
ExifInterface exif = new ExifInterface(cameraimagename); String orientString = exif.getAttribute(ExifInterface.TAG_ORIENTATION); int orientation = orientString != null ? Integer.parseInt(orientString) : ExifInterface.ORIENTATION_NORMAL; int rotationAngle = 0; System.out.println("orientation is : "+orientation); System.out.println("ExifInterface.ORIENTATION_ROTATE_90 : "+ExifInterface.ORIENTATION_ROTATE_90); System.out.println("ExifInterface.ORIENTATION_ROTATE_180 : "+ExifInterface.ORIENTATION_ROTATE_180); System.out.println("ExifInterface.ORIENTATION_ROTATE_270 : "+ExifInterface.ORIENTATION_ROTATE_270); if (orientation == ExifInterface.ORIENTATION_ROTATE_90) rotationAngle = 90; if (orientation == ExifInterface.ORIENTATION_ROTATE_180) rotationAngle = 180; if (orientation == ExifInterface.ORIENTATION_ROTATE_270) rotationAngle = 270; System.out.println("Rotation Angle is : "+rotationAngle); Matrix matrix = new Matrix(); // matrix.setRotate(rotationAngle, (float) photo.getWidth() / 2, (float) photo.getHeight() / 2); matrix.postRotate(rotationAngle); Bitmap rotatedBitmap=null; try { rotatedBitmap = Bitmap.createBitmap(photo, 0, 0, photo.getWidth(), photo.getHeight(), matrix, true); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }
cameraimagename = chemin de l'image (chaîne) et la photo est l'objet bitmap généré précédemment
J'ai essayé du code similaire, ça m'a été très lent, vivez-vous le même problème?
Non @Helin Wang sa fonctionne parfaitement sur mon appareil Galaxy S2
Il est facile de détecter l'orientation de l'image et de remplacer le bitmap à l'aide de: pour éviter les souvenirs avec de grosses images, je vous recommanderais de réaffecter l'image à l'aide de: p > private static final int MAX_HEIGHT = 1024;
private static final int MAX_WIDTH = 1024;
public static Bitmap decodeSampledBitmap(Context context, Uri selectedImage)
throws IOException {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
InputStream imageStream = context.getContentResolver().openInputStream(selectedImage);
BitmapFactory.decodeStream(imageStream, null, options);
imageStream.close();
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, MAX_WIDTH, MAX_HEIGHT);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
imageStream = context.getContentResolver().openInputStream(selectedImage);
Bitmap img = BitmapFactory.decodeStream(imageStream, null, options);
img= rotateImageIfRequired(img, selectedImage);
return img;
}
Voir cet ancien Répondre . Cela pourrait vous aider. :)
Pour faire pivoter votre image bitmap, reportez-vous à cette lien
Je ne comprends toujours pas: dans l'orientation portrait, je ne reçois pas une image pivotée ... Je ne reçois pas de photo du tout ... et non une erreur ou une exception ... sa semble que de sauter la ligne imageview.setimagebitmap (dash); (mais dans le paysage, ça marche ...)
J'ai trouvé le problème - pour une raison quelconque lorsque la photo est prise dans un paysage lors de la reprise de l'activité, l'Oncreate n'est pas appelé. Toutefois, lorsque vous avez pris une image dans une orientation portrait, la fonction Oncreate est appelée et réinitialiser les variables d'activité b> et donc je n'ai pas vu la photo prise ... Quelqu'un peut-il connaître la raison de ce comportement?
Quelqu'un a-t-il trouvé une solution dans ce comportement étrange ?? J'ai les mêmes problèmes et ... je suis une pile débordement !!
Cela devrait aider! [Voyez-le, car j'ai l'habitude de résoudre le problème d'orientation] [1] [1]: Stackoverflow.com/a/16742014/583344
Visitez ici << a href = "http://stackoverflow.com/questions/8450539/images-take-with-bith-Action-Image-Capture-always-returns-1-for-exifInterface-tag-or" title = "images Pris avec Action Image Capture Retourne toujours 1 pour EXIFTORFACE TAG ou "> Stackoverflow.com/Questtions/8450539/... >. Le gars a représenté une solution complète à cela.