Могу ли я получить ориентацию фотографии, сделанной в моем приложении, если я ограничу ориентацию действия портретом только в своем манифесте? - PullRequest
1 голос
/ 07 мая 2019

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

Я пытался получить ориентацию из системы следующим образом:

val display = (getSystemService(Context.WINDOW_SERVICE) as WindowManager).defaultDisplay
val screenOrientation = display.rotation
Log.d("orientation", screenOrientation.toString())

Но это не работает и просто возвращает 0 каждый раз.

Я попробовал несколько других решений, но не смог заставить их работать.

Мне интересно, я трачу свое время, пытаясь понять это? Можно ли узнать ориентацию, в которой была сделана фотография, если моя деятельность работает только в портретном режиме? Есть несколько статей, в которых говорится об ориентации камеры, но они не говорят о том, заблокирована ли ориентация в их действиях.

Спасибо.

1 Ответ

0 голосов
/ 07 мая 2019
    //Yes, find the Orientation Using ExifInterface
       try{
            File imageFile = new File(imagePath);
            ExifInterface exif = new ExifInterface(imageFile.getAbsolutePath());
            int orientation = exif.getAttributeInt(
                                ExifInterface.TAG_ORIENTATION,
                                ExifInterface.ORIENTATION_NORMAL);

     // dont know exactly but, orientation for landscape may be 180 or 270.
     //  From the orientation value you can convert image according to orientation and can be set it vertically, horrizentally as below

             int rotate = 0;
             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;
              }
              Log.e(Common.TAG, "Exif orientation: " + orientation);
            }
       catch (Exception e) {
           e.printStackTrace();
       }

      // Now Change image as your wish...
      // Image rotation //
      Matrix matrix = new Matrix();
      matrix.postRotate(orientation);
      Bitmap cropped = Bitmap.createBitmap(scaled, x, y, width, height, matrix, true);  
...