Importar la Galería de Android

Estoy usando selector de galería para escoger una imagen de la galería. Las fotos tomadas por la cámara en modo vertical se muestran en la galería como rectas. Pero cuando importo las fotos, consigo la foto como rotada (paisaje). Sólo la galería está mostrando esta imagen como recto. ¿Cómo gestionar este problema? Quiero todas las fotos como su orientación real. Gracias por adelantado

private void addImageFromGallery() { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Picture"), GALLERY_CODE); } 

Tengo la respuesta. La orientación se guarda con la imagen en formato EXIF. Tenemos que leer la etiqueta Orientación de los datos para cada imagen.

 public static float rotationForImage(Context context, Uri uri) { if (uri.getScheme().equals("content")) { String[] projection = { Images.ImageColumns.ORIENTATION }; Cursor c = context.getContentResolver().query( uri, projection, null, null, null); if (c.moveToFirst()) { return c.getInt(0); } } else if (uri.getScheme().equals("file")) { try { ExifInterface exif = new ExifInterface(uri.getPath()); int rotation = (int)exifOrientationToDegrees( exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL)); return rotation; } catch (IOException e) { Log.e(TAG, "Error checking exif", e); } } return 0f; } private static float exifOrientationToDegrees(int exifOrientation) { if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) { return 90; } else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) { return 180; } else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) { return 270; } return 0; } } 

El valor de rotación se puede utilizar para corregir la orientación de una foto de la siguiente manera:

 Matrix matrix = new Matrix(); float rotation = PhotoTaker.rotationForImage(context, uri); if (rotation != 0f) { matrix.preRotate(rotation); } Bitmap resizedBitmap = Bitmap.createBitmap( sourceBitmap, 0, 0, width, height, matrix, true); 

mientras lo ajusta a la vista de la imagen, compruebe si el ancho de la imagen es mayor que la altura o no y gírelo a 90 si es necesario

  • Cómo obtener el tamaño del sensor de la cámara en el dispositivo Android?
  • Android: muestra líneas de cuadrícula en la cámara
  • Control de la exposición automática de la cámara
  • ¿Es posible recortar la vista previa de la cámara?
  • Cómo compilar la aplicación Cámara + Galería de Android 4.1 / 4.2 juntos
  • Vista de la superficie de la cámara
  • Cómo obtener id de la cámara frente a frente con Camera2?
  • Error de la cámara 2 android 6.0
  • Necesita un ejemplo de tomar una imagen con MonoDroid y MVVMCross
  • Open failed: ENOENT (No hay tal archivo o directorio) error
  • Obtener Ruta de la imagen desde ACTION_IMAGE_CAPTURE Propósito
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.