8
votes

"Prenez une photo et présentez-le" en mode portrait sur Samsung Galaxy S

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 pas sur portrait. Je ne reçois aucune erreur ni exception - tout simplement de ne rien obtenir ... Il y a beaucoup de questions sur ce sujet et il semble être problématique (quelque chose à propos de l'orientation de la caméra), mais de ne pas comprendre la solution finale pour un simple " Prenez une photo et présentez-le »Code. Voici mon code (problématique) qui ne fonctionne pas: xxx

}

J'ai juste besoin d'un code qui fonctionne (sur n'importe quel appareil) ou d'une solution à mon code ... THX.


7 commentaires

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é 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.


4 Réponses :


1
votes

Je peux seulement suggérer un hack pour ce problème. Enregistrez vos résultats dans des préférences partagées dans OnActiVIVIVIVIVIVITURE () et pendant Oncreate 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.


0 commentaires

2
votes

La raison pour laquelle oncreate () 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 () , votre activité sera ré-créée.

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: xxx

Si vous utilisez API Démarrage avec le niveau 13, vous pouvez envisager ScreenSize pour le manifeste des configchanges.


0 commentaires

1
votes

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();
                    }


3 commentaires

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



0
votes

Il est facile de détecter l'orientation de l'image et de remplacer le bitmap à l'aide de: xxx pré>

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;
} 


0 commentaires