2011-04-07 12 views
24

Necesito saber la orientación de una imagen de la galería (tomada por la cámara). Mi enfoque inicial fue utilizar MediaStore.Images.Media.ORIENTATION, que funcionaba para mi Droid 1. Mientras probaba en el HTC Thunderbolt, ese teléfono solo guarda 0 en ese campo.Exif data TAG_ORIENTATION always 0

luego se trasladó a la lectura de los datos EXIF:

ExifInterface exifReader = new ExifInterface(mFilePath); 
exifReader.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1); 

Esto también devuelve 0 para cada imagen. ¿Alguien tiene ideas sobre cómo obtener correctamente la orientación de una foto en Android?

+0

he encontrado otra solución que realmente funciona muy bien! http://stackoverflow.com/a/19610087/2854335 – belphegor

Respuesta

5

Mi solución:

Retire ninguna comprobación para la orientación de los datos EXIF. No pude encontrar una instancia en la que fuera precisa.

Utilice la norma String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION}; para obtener una orientación.

Si esto es 0 uso decodeStream ...

if(o.outHeight > o.outWidth){ 
    //set orientation to portrait 
} 

demás es paisaje

+2

Esto no funciona para mí porque, de alguna manera la altura, la anchura se conmutan correctamente si la imagen era en realidad en una orientación diferente .. –

+0

Sólo para actualizar mi propio problema, así es como superé este problema; http://stackoverflow.com/a/8864367/137404 –

+0

¿Qué pasa si la imagen es cuadrada así que el ancho y la altura son los mismos pero la imagen está invertida y quiero voltearla? –

29

Este es el código utilicé onActivityResult() en mi actividad. El intento devuelto fue para elegir una imagen del tipo imagen/*. ¡Me funciona bien!

Uri imageUri = intent.getData(); 
String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION}; 
Cursor cur = managedQuery(imageUri, orientationColumn, null, null, null); 
int orientation = -1; 
if (cur != null && cur.moveToFirst()) { 
    orientation = cur.getInt(cur.getColumnIndex(orientationColumn[0])); 
} 
Matrix matrix = new Matrix(); 
matrix.postRotate(orientation); 
+0

este enfoque me ha funcionado para obtener la orientación de la imagen en la galería. Gracias..!! :) – sarabhai05

+0

Esa es la única solución que funcionó para mí – orelzion

+4

¡Gracias! tenga en cuenta que managedQuery ahora está en desuso. Puede reemplazarlo por "getApplicationContext(). GetContentResolver(). Query (...)". –

3

Esto es un error que me pareció que estaba relacionado con otro error androide .. He encontrado una solución razonable publicado aquí https://stackoverflow.com/a/8864367/137404

+0

Ese enlace publicó otro enlace que publicó otro enlace. Linkception es un crimen aquí en SO. –

Cuestiones relacionadas