2016-06-22 3 views
2

При захвате фотографии с помощью намерения MediaStore.ACTION_IMAGE_CAPTURE отображаемый превью находится в неправильной ориентации. Это происходит только на нескольких устройствах. Прилагается скриншот, как он выглядит. Фотография была сделана с передней камеры на портрете. Наше приложение уже обрабатывает коррекцию ориентации, поэтому, когда пользовательские ответчики проверяют, он находится в правильной ориентации. Проблема в том, что это просто предварительный просмотр.Android MediaStore Image Capture Preview Отображение в неправильной ориентации

Пробовал использовать i.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);, но он не работает. Есть ли способ решить это? Или мне нужно реализовать пользовательскую камеру?

EDIT: Предварительный просмотр, который я имел в виду, показан после съемки фотографии и перед тем, как вы выберите/завершите фотографию, которую вы захватили. В нашем случае (как показано на скриншоте прилагается, onActivityResult() пока не называется. При нажатии на кнопку проверки является то, что вызывает onActivityResult() обратного вызова.

Taken with the front cam on portrait

+0

Когда-нибудь находили решение? – Emmanuel

+0

Извините @ Emmanuel, я не смог его найти. –

ответ

0

Большинство телефонов камеры пейзаж , то есть, если вы берете фото в портрет, полученные фотографии будут повернуты на 90 градусов. в этом случае программное обеспечение камеры должны заполнить данные EXIF ​​с ориентацией, что фотография должна быть просмотрены в. I copy this answer from here

Другой путь , вы может получить поворот от камеры, а затем сделать то, что вы хотите вернуть изображение. Full code here Этот образец об изображении, но изображение с обращением к коду помогает мне управлять вращением изображения.

private int getRotationFromCamera(Context context, Uri imageFile) { 
     int rotate = 0; 
     try { 

      context.getContentResolver().notifyChange(imageFile, null); 
      ExifInterface exif = new ExifInterface(imageFile.getPath()); 
      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(); 
     } 
     return rotate; 
    } 
+0

На самом деле, у нас нет проблем с исправлением полученной фотографии в правильной ориентации, потому что onActivityResult мы определяем вращение, подобное методу в вашем ответе. Проблема заключается в намерении MediaStore.ACTION_IMAGE_CAPTURE (любое приложение для камеры, которое он запускает, я понятия не имею), что отображает его предварительный просмотр неправильно. Предварительный просмотр, который я имел в виду, - это тот, который показан после захвата и перед тем, как выбрать/завершить изображение, которое вы захватили. –

+0

Но спасибо за ваш вклад. Я ценю это. –

+0

После захвата вы можете временно проверить сохраненное изображение. Имеет ли изображение истинную ориентацию? – Fuyuba

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