2016-03-29 16 views
0

Ich verwende den folgenden Code, um die Ausrichtung des ausgewählten Bildes zu erhalten, so dass, wenn es vertikal genommen wurde, wenn es aus der Galerie ausgewählt wurde, würde es nicht horizontal angezeigt werden.Bild gedreht, wenn aus der Galerie ausgewählt

Der Fehler tritt in der Datei imageFile = neue Datei (selectedImage.toString()); im Parameter selectedImage.toString()) seit dem ich das ursprüngliche int rotiere = 90 änderte und ein vertikales Bild wählte, war das Ergebnis gut.

Übergeben ich den Parameter an die Datei korrekt?

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    BitmapFactory.Options options; 
    if (resultCode == RESULT_OK && requestCode == PICTURE_SELECTED) { 
     try { 
      options = new BitmapFactory.Options(); 
      options.inSampleSize = 4; 
      Uri selectedImage = data.getData(); 
      InputStream stream = getContentResolver().openInputStream(selectedImage); 
      Bitmap yourSelectedImage = BitmapFactory.decodeStream(stream, null, options); 
      stream.close(); 
      //orientation 
      try { 
       int rotate = 0; 
       try { 
        File imageFile = new File(selectedImage.toString()); 
        ExifInterface exif = new ExifInterface(
          imageFile.getAbsolutePath()); 
        int orientation = exif.getAttributeInt(
          ExifInterface.TAG_ORIENTATION, 
          ExifInterface.ORIENTATION_NORMAL); 

        switch (orientation) { 
         case ExifInterface.ORIENTATION_ROTATE_270: 
          rotate = 270; 
          break; 
         case ExifInterface.ORIENTATION_ROTATE_180: 
          rotate = 180; 
          break; 
         case ExifInterface.ORIENTATION_ROTATE_90: 
          rotate = 90; 
          break; 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       Matrix matrix = new Matrix(); 
       matrix.postRotate(rotate); 
       yourSelectedImage = Bitmap.createBitmap(yourSelectedImage , 0, 0, yourSelectedImage.getWidth(), yourSelectedImage.getHeight(), matrix, true); } 
      catch (Exception e) {} 
      //end of orientation 

      imgButton.setScaleType(ImageView.ScaleType.FIT_CENTER); 
      imgButton.setImageBitmap(yourSelectedImage); 
     } catch (Exception e) { 
      Toast.makeText(getApplicationContext(), "Could not open file.", Toast.LENGTH_LONG).show(); 
     } 
    } else { 
     Toast.makeText(getApplicationContext(), "Image was not selected", Toast.LENGTH_LONG).show(); 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 
+0

Fügen Sie diese Zeile in Ihrem Manifest in Ihrer Tätigkeit, bei der die Bildgalerie wie diese

+0

Hat dieser Code ein wenig geholfen? –

+0

Nein, Fehler: android: configChanges und screenOrientation sind dort nicht erlaubt – cgeekmt

Antwort

1

Ändern Sie bitte Ihre Methode wie folgt:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    BitmapFactory.Options options; 
    if (resultCode == RESULT_OK && requestCode == PICTURE_SELECTED) { 
     try { 
      options = new BitmapFactory.Options(); 
      options.inSampleSize = 4; 
      Uri selectedImage = data.getData(); 

      String[] filePath = {MediaStore.Images.Media.DATA}; 

      Cursor cursor = getContentResolver().query(selectedImage, filePath, null, null, null); 
        cursor.moveToFirst(); 
      String mImagePath = cursor.getString(cursor.getColumnIndex(filePath[0])); 

      InputStream stream = getContentResolver().openInputStream(selectedImage); 
      Bitmap yourSelectedImage = BitmapFactory.decodeStream(stream, null, options); 
      stream.close(); 
      //orientation 
      try { 
       int rotate = 0; 
       try { 
        ExifInterface exif = new ExifInterface(
          mImagePath); 
        int orientation = exif.getAttributeInt(
          ExifInterface.TAG_ORIENTATION, 
          ExifInterface.ORIENTATION_NORMAL); 

        switch (orientation) { 
         case ExifInterface.ORIENTATION_ROTATE_270: 
          rotate = 270; 
          break; 
         case ExifInterface.ORIENTATION_ROTATE_180: 
          rotate = 180; 
          break; 
         case ExifInterface.ORIENTATION_ROTATE_90: 
          rotate = 90; 
          break; 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       Matrix matrix = new Matrix(); 
       matrix.postRotate(rotate); 
       yourSelectedImage = Bitmap.createBitmap(yourSelectedImage , 0, 0, yourSelectedImage.getWidth(), yourSelectedImage.getHeight(), matrix, true); } 
      catch (Exception e) {} 
      //end of orientation 

      imgButton.setScaleType(ImageView.ScaleType.FIT_CENTER); 
      imgButton.setImageBitmap(yourSelectedImage); 
     } catch (Exception e) { 
      Toast.makeText(getApplicationContext(), "Could not open file.", Toast.LENGTH_LONG).show(); 
     } 
    } else { 
     Toast.makeText(getApplicationContext(), "Image was not selected", Toast.LENGTH_LONG).show(); 
    } 
} 
+0

Danke das hat funktioniert :) – cgeekmt

+0

Ich bin froh! Bitte stimme meine Antwort ab. Vielen Dank! –

+0

Ich habe es als richtige Antwort markiert. Ich kann nicht wählen, da ich zuerst einen Ruf von 15 brauche. Danke – cgeekmt

0

für Bildhandhabung kompilieren picasso ist beste Bibliothek es verwenden Sie Bilder leicht handhaben kann es mit Ihnen Bild aus dem Cache geladen werden können und die Leistung Ihrer App steigern Versuchen Sie also, viel Code zu vermeiden und fügen Sie die folgende Zeile in Ihrem Build-Großbuchstaben ein und verwenden Sie dann Picasso in Ihrem Code.

compile 'com.squareup.picasso:picasso:2.5.0' 
+0

mit Picasso löst das Problem nicht, das Bild wird noch gedreht – Curio

Verwandte Themen