Я немного начинающий разработчик Android, но я работаю над проектом по повышению эффективности использования памяти при обработке изображений нашим приложением.
Прямо сейчас у нас есть некоторый код для поворота изображения на основе данных Exif, чтобы убедиться, что оно направо вверх. Я хотел бы сделать то же самое, но в Glide, но я не могу найти документацию по этому вопросу ... или даже документацию по чтению данных Exif.
Я должен представить, что это довольно распространенный вариант использования! Я хотел бы взять следующий код и сократить его до простого метода Glide.
Вот что мы имеем сейчас:
final Matrix bitmapMatrix = new Matrix();
int widthMultiplier = 1;
int heightMultiplier = 1;
try {
Metadata metadata = ImageMetadataReader.readMetadata(new ByteArrayInputStream(bo.toByteArray()));
final Collection<ExifIFD0Directory> exifIFD0Directories = metadata.getDirectoriesOfType(ExifIFD0Directory.class);
if (exifIFD0Directories != null) {
for (ExifIFD0Directory d : exifIFD0Directories) {
if (d.containsTag(ExifIFD0Directory.TAG_ORIENTATION)) {
try {
final int exifOrientation = d.getInt(ExifIFD0Directory.TAG_ORIENTATION);
switch (exifOrientation) {
case 1:
break; // top left
case 2:
heightMultiplier = -1;
break; // top right
case 3:
bitmapMatrix.postRotate(180);
break; // bottom right
case 4:
bitmapMatrix.postRotate(180);
heightMultiplier = -1;
break; // bottom left
case 5:
bitmapMatrix.postRotate(90);
heightMultiplier = -1;
break; // left top
case 6:
bitmapMatrix.postRotate(90);
break; // right top
case 7:
bitmapMatrix.postRotate(270);
heightMultiplier = -1;
break; // right bottom
case 8:
bitmapMatrix.postRotate(270);
break; // left bottom
default:
break; // Unknown
}
break;
} catch (MetadataException e) {
handleException(e, subscriber, uri, inputStream, mFinalPath, fromGallery);
return;
}
}
}
}
} catch (ImageProcessingException | IOException e) {
handleException(e, subscriber, uri, inputStream, mFinalPath, fromGallery);
return;
}
Любые идеи приветствуются.