2015-08-19 5 views
3

Сбор изображений из галереи со следующим кодом:Галерея снимков, сделанных на андроидов Samsung всегда в ландшафте, даже если принимать в портретном

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("*/*"); 
intent.addCategory(Intent.CATEGORY_OPENABLE); 
startActivityForResult(intent, PICK_FILE_RESULT_CODE); 

Получение результата с помощью следующего кода:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == PICK_FILE_RESULT_CODE) { 
     if (resultCode == RESULT_OK && data != null && data.getData() != null) { 
      // Get the Uri of the selected file 
      Uri uri = data.getData(); 

      //Using Picasso to load uri to imageView 
      //Image is in landscape even if it was taken in portrait 

     } 
    } 
} 

код работает отлично подходит для телефонов HTC и Nexus, но для устройств Samsung (Galaxy 5 и Galaxy 5 mini) ориентация неверна, если фотография была сделана на портрете. При взгляде на ExifInterface ориентация не определена ..

File imageFile = new File(uri.getPath()); 
ExifInterface exif = new ExifInterface(
imageFile.getAbsolutePath()); 
int orientation = exif.getAttributeInt(
       ExifInterface.TAG_ORIENTATION, 
       ExifInterface.ORIENTATION_NORMAL); 
//orientation is always 0 for samsung devices = ORIENTATION_UNDEFINED 

Как я могу представить образы правильно альтернативные определить правильную ориентацию, так что я могу повернуть изображение?

+0

отправить мне 2 изображений образца (1 в каждой ориентации), и я вам скажу, если я найти любую информацию, определяющую ориентация ([email protected]). – BitBank

+0

Я отправил письмо, содержащее изображения сейчас, спасибо за то, что уделил вам время! @BitBank – user1354603

+0

Изображения содержат информацию о ориентации EXIF. Первый - «90 градусов влево», а второй - «180 градусов». – BitBank

ответ

-1

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

public static int getExifOrientation(Context context, Uri uri) { 
    ContentResolver contentResolver = context.getContentResolver(); 
    Cursor cursor = null; 
    try { 
     String id = DocumentsContract.getDocumentId(uri); 
     id = id.split(":")[1]; 
     cursor = contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
       CONTENT_ORIENTATION, MediaStore.Images.Media._ID + " = ?", new String[] { id }, null); 
     if (cursor == null || !cursor.moveToFirst()) { 
      return 0; 
     } 
     return cursor.getInt(0); 
    } catch (RuntimeException ignored) { 
     // If the orientation column doesn't exist, assume no rotation. 
     return 0; 
    } finally { 
     if (cursor != null) { 
      cursor.close(); 
     } 
    } 
} 

https://vikaskanani.wordpress.com/2011/07/17/android-re-size-image-without-loosing-exif-information/

+5

Что такое CONTENT_ORIENTATION здесь? – anthonymonori