Escribí una actividad de cámara personalizada para manejar algunos problemas que he tenido con ciertos dispositivos Android al llamar a la captura de imágenes con intención. El usuario puede seleccionar guardar imagen o simplemente usar los datos devueltos desde OnPictureTakenCallback
.Problema de orientación de la imagen de Android con actividad de cámara personalizada
El problema que tengo es mostrar la imagen correctamente con respecto a la orientación que se tomó. Forzaré la actividad para que se muestre en retrato llamando al SetRequestedOrientation
.
¿Cómo sabría la orientación correcta de la cámara cuando el usuario tomó la fotografía? es decir, el usuario podría tomar la foto con una rotación de 90 (vertical).
He intentado utilizar el getRotation()
en la pantalla predeterminada del administrador de ventanas, pero estableciendo la orientación solicitada en retrato que solo devuelve Surface.ROTATION_0
.
Actualización: Para aclarar mi otro problema, ¿cómo podría determinar la orientación de solo los datos byte[]
en la devolución de llamada de la imagen si el usuario no guardara la imagen?
Actualización: Después de intentar las siguientes respuestas con este código, todo lo que obtengo es ExifInterface.ORIENTATION_NORMAL. También cambié mi código para guardar el archivo devuelto por la cámara, ya que no estoy seguro de que haya una manera fácil de determinar la orientación con solo tener los datos byte[]
.
private PictureCallback mPicture = new PictureCallback()
{
@Override
public void onPictureTaken(byte[] data, Camera camera)
{
File directory = new File(android.os.Environment.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_PICTURES),
"MyApp");
if(!directory.exists())
{
if(!directory.mkdirs())
{
Log.d("CAMERA", "Unable to create directory to save photos.");
return;
}
}
File file = new File(directory.getPath() + file.separator + "IMG_" + SimpleDateFormat.getDateTimeInstance().toString() + ".jpg");
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.close();
ExifInterface exif = new ExifInterface(file.getCanonicalPath());
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
int rotate = 0;
switch (orientation)
{
case ExifInterface.ORIENTATION_ROTATE_90:
rotate = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotate = 270;
break;
case default:
break;
}
}
};
puede alguien ayudar http://stackoverflow.com/questions/28379130/how -to-set-camera-image-orientation –