Все изображения с вертикальной ориентацией странным образом автоматически на некоторых устройствах

У меня есть приложение, которое делает снимки с камеры или галереи и показывает результат в режиме просмотра изображений.

Я получаю изображение только с контент-провайдером и использую эту функцию масштабирования.

public Bitmap scaleim(Bitmap bitmap) {
       ...
        Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, resizedWidth, resizedHeight, false);
        return scaledBitmap;
    }

В моих устройствах с Android 5 все работает нормально, теперь я протестировал одно и то же приложение на устройстве моего друга с Android 7, и все изображения, которые ориентированы вертикально, автоматически поворачиваются в горизонтальное положение. Это выглядит очень странно, и я понятия не имею, что вызывает проблему.

1 ответ

Решение

Проблема не в масштабировании, а в том, что захваченные изображения работают по-разному в зависимости от аппаратного обеспечения. Перед началом масштабирования следует повернуть его в соответствии с подходящими устройствами. Вот это следующий код:

  Matrix matrix = new Matrix();
  matrix.postRotate(getImageOrientation(url));
  Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
  bitmap.getHeight(), matrix, true)

public static int getImageOrientation(String imagePath){
     int rotate = 0;
     try {

         File imageFile = new File(imagePath);
         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 (IOException e) {
         e.printStackTrace();
     }
    return rotate;
 }
Другие вопросы по тегам