Prevent crash

This commit is contained in:
M66B 2020-03-18 07:53:57 +01:00
parent fc3d4a3d11
commit 66b6bea31d
1 changed files with 49 additions and 40 deletions

View File

@ -593,13 +593,7 @@ class ImageHelper {
while (options.outWidth / factor > scaleToPixels) while (options.outWidth / factor > scaleToPixels)
factor *= 2; factor *= 2;
Matrix rotation = null; Matrix rotation = getImageRotation(file);
try {
rotation = getImageRotation(file);
} catch (IOException ex) {
Log.w(ex);
}
if (factor > 1 || rotation != null) { if (factor > 1 || rotation != null) {
Log.i("Decode image factor=" + factor); Log.i("Decode image factor=" + factor);
options.inJustDecodeBounds = false; options.inJustDecodeBounds = false;
@ -618,40 +612,55 @@ class ImageHelper {
return BitmapFactory.decodeFile(file.getAbsolutePath()); return BitmapFactory.decodeFile(file.getAbsolutePath());
} }
static Matrix getImageRotation(File file) throws IOException { static Matrix getImageRotation(File file) {
ExifInterface exif = new ExifInterface(file.getAbsolutePath()); try {
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED); ExifInterface exif = new ExifInterface(file.getAbsolutePath());
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
Matrix matrix = new Matrix(); Matrix matrix = new Matrix();
switch (orientation) { switch (orientation) {
case ExifInterface.ORIENTATION_NORMAL: case ExifInterface.ORIENTATION_NORMAL:
return null; return null;
case ExifInterface.ORIENTATION_FLIP_HORIZONTAL: case ExifInterface.ORIENTATION_FLIP_HORIZONTAL:
matrix.setScale(-1, 1); matrix.setScale(-1, 1);
return matrix; return matrix;
case ExifInterface.ORIENTATION_FLIP_VERTICAL: case ExifInterface.ORIENTATION_FLIP_VERTICAL:
matrix.setRotate(180); matrix.setRotate(180);
matrix.postScale(-1, 1); matrix.postScale(-1, 1);
return matrix; return matrix;
case ExifInterface.ORIENTATION_TRANSPOSE: case ExifInterface.ORIENTATION_TRANSPOSE:
matrix.setRotate(90); matrix.setRotate(90);
matrix.postScale(-1, 1); matrix.postScale(-1, 1);
return matrix; return matrix;
case ExifInterface.ORIENTATION_TRANSVERSE: case ExifInterface.ORIENTATION_TRANSVERSE:
matrix.setRotate(-90); matrix.setRotate(-90);
matrix.postScale(-1, 1); matrix.postScale(-1, 1);
return matrix; return matrix;
case ExifInterface.ORIENTATION_ROTATE_90: case ExifInterface.ORIENTATION_ROTATE_90:
matrix.setRotate(90); matrix.setRotate(90);
return matrix; return matrix;
case ExifInterface.ORIENTATION_ROTATE_180: case ExifInterface.ORIENTATION_ROTATE_180:
matrix.setRotate(180); matrix.setRotate(180);
return matrix; return matrix;
case ExifInterface.ORIENTATION_ROTATE_270: case ExifInterface.ORIENTATION_ROTATE_270:
matrix.setRotate(-90); matrix.setRotate(-90);
return matrix; return matrix;
default: default:
return null; return null;
}
} catch (Throwable ex /* IOException */) {
/*
java.lang.RuntimeException: setDataSourceCallback failed: status = 0x80000000
java.lang.RuntimeException: setDataSourceCallback failed: status = 0x80000000
at android.media.MediaMetadataRetriever._setDataSource(Native Method)
at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:226)
at androidx.exifinterface.media.ExifInterface.getHeifAttributes(SourceFile:5716)
at androidx.exifinterface.media.ExifInterface.loadAttributes(SourceFile:4556)
at androidx.exifinterface.media.ExifInterface.initForFilename(SourceFile:5195)
at androidx.exifinterface.media.ExifInterface.<init>(SourceFile:3926)
*/
Log.w(ex);
return null;
} }
} }