2016-03-29 3 views
0

Я использую следующий код, чтобы получить ориентацию выбранного изображения, чтобы, если оно было выбрано вертикально, если оно выбрано из галереи, оно не будет отображаться горизонтально.Изображение повернуто, если выбрано из галереи

Ошибка возникает в файле Файл imageFile = новый файл (selectedImage.toString()); в параметре selectedImage.toString()), поскольку, когда я изменил начальный int rotate = 90 и выбрал вертикальное изображение, результат был хорошим.

Я передаю параметр в файл правильно?

@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

Добавьте эту строку в вашем манифесте внутри вашей деятельности, в которой изображение открытия галереи как этот <деятельность андроида: имя = андроид «ui.ui.activity.MainActivity.»: ConfigChanges = "keyboardHidden | ориентация | screenSize " android: label =" @ string/title_activity_main " android: screenOrientation =" portrait "/> –

+0

Помог ли этот код немного? –

+0

Нет, ошибки: android: configChanges и screenOrientation не разрешены там – cgeekmt

ответ

1

Измените метод так:

@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

Спасибо, что сработал :) – cgeekmt

+0

Я рад! Пожалуйста, проголосуйте за мой ответ. Благодаря! –

+0

Я отметил это как правильный ответ. Я не могу голосовать, так как мне нужна репутация 15. Спасибо – cgeekmt

0

для обработки изображений компиляции Picasso лучше библиотеки, используя его, вы можете легко обрабатывать изображения, используя его, вы можете загрузить изображение из кэша также и увеличить производительность вашего приложения поэтому старайтесь избегать большого количества кода и добавляйте следующую строку в графе построения, а затем используйте picasso в своем коде.

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

, используя picasso, не решает проблему, изображение по-прежнему вращается – Curio

Смежные вопросы