Получение поворота из ExifInterface всегда возвращает 0
Я передаю растровое изображение через связку наonActivityResult
с камеры.
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);
Я могу получить растровое изображение:
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), mCapturedImageURI);
Однако я заметил, что изображение поворачивается на некоторых устройствах. После поиска сообщений здесь, типичное решение, похоже, получило ротацию через:
String path = mCapturedImageURI.getPath();
ExifInterface exif = new ExifInterface(path);
int rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
К сожалению мойint rotation
всегда 0, хотя растровое изображение повернуто.
Я также попробовал это, который работал, когда я загрузил изображение уже на устройстве, но ориентация по-прежнему 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]));
}
Кто-нибудь видит что-то, что я могу здесь делать неправильно? Или другой обходной путь?
Обычно растровое изображение поворачивается на 90 градусов против часовой стрелки с задней камерой и на 90 градусов по часовой стрелке с передней камерой. Работает нормально на Moto G. Поворачивается на Galaxy S3 и LG G2.