From c779c7c6ed7a5c480f785d4070fcc2fdde18765e Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Sat, 25 Oct 2014 16:51:49 +0200 Subject: [PATCH] - obey exif orientation tag --- .../ui/preview/PreviewImageFragment.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java index 4dd5c43679..46084d1a54 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java @@ -30,7 +30,9 @@ import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapFactory.Options; +import android.graphics.Matrix; import android.graphics.Point; +import android.media.ExifInterface; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.FragmentStatePagerAdapter; @@ -412,9 +414,73 @@ public class PreviewImageFragment extends FileFragment { Log_OC.e(TAG, "Unexpected error loading " + getFile().getStoragePath(), t); } + + result = rotateImage(result, storagePath); + + return result; } + private Bitmap rotateImage(Bitmap bitmap, String storagePath){ + Bitmap resultBitmap = bitmap; + + try + { + ExifInterface exifInterface = new ExifInterface(storagePath); + int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1); + + Matrix matrix = new Matrix(); + + // 1: nothing to do + + // 2 + if (orientation == ExifInterface.ORIENTATION_FLIP_HORIZONTAL) + { + matrix.postScale(-1.0f, 1.0f); + } + // 3 + else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) + { + matrix.postRotate(180); + } + // 4 + else if (orientation == ExifInterface.ORIENTATION_FLIP_VERTICAL) + { + matrix.postScale(1.0f, -1.0f); + } + // 5 + else if (orientation == ExifInterface.ORIENTATION_TRANSPOSE) + { + matrix.postRotate(-90); + matrix.postScale(1.0f, -1.0f); + } + // 6 + else if (orientation == ExifInterface.ORIENTATION_ROTATE_90) + { + matrix.postRotate(90); + } + // 7 + else if (orientation == ExifInterface.ORIENTATION_TRANSVERSE) + { + matrix.postRotate(90); + matrix.postScale(1.0f, -1.0f); + } + // 8 + else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) + { + matrix.postRotate(270); + } + + // Rotate the bitmap + resultBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); + } + catch (Exception exception) + { + Log_OC.e(TAG, "Could not rotate the image: " + storagePath); + } + return resultBitmap; + } + @Override protected void onPostExecute(Bitmap result) { hideProgressWheel();