Obter rotação do ExifInterface sempre retorna 0
Estou passando um bitmap via pacote emonActivityResult
de uma câmera
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, "picture");
mCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
startActivityForResult(intent, REQUEST_TAKE_PHOTO);
Eu posso obter o bitmap:
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), mCapturedImageURI);
No entanto, notei que a imagem é rotacionada em alguns dispositivos. Depois de pesquisar as postagens aqui, a solução típica parecia obter a rotação via:
String path = mCapturedImageURI.getPath();
ExifInterface exif = new ExifInterface(path);
int rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
Infelizmente, meuint rotation
é sempre 0, mesmo que o bitmap seja girado.
Eu também tentei isso que funcionou quando eu carreguei uma imagem já no dispositivo, mas a orientação ainda é 0:
String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION};
Cursor cur = managedQuery(mCapturedImageURI, orientationColumn, null, null, null);
if (cur != null && cur.moveToFirst()) {
orientation = cur.getInt(cur.getColumnIndex(orientationColumn[0]));
}
Alguém viu alguma coisa que eu possa estar fazendo de errado aqui? Ou outra solução alternativa?
Geralmente, o bitmap é girado 90 graus no sentido anti-horário com a câmera traseira e 90 graus no sentido horário com a câmera frontal. Funciona bem no Moto G. Rodado no Galaxy S3 e LG G2.