- obey exif orientation tag

This commit is contained in:
tobiasKaminsky 2014-10-25 16:51:49 +02:00
parent 8d3a956c97
commit c779c7c6ed

View file

@ -30,7 +30,9 @@ import android.app.Activity;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options; import android.graphics.BitmapFactory.Options;
import android.graphics.Matrix;
import android.graphics.Point; import android.graphics.Point;
import android.media.ExifInterface;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.FragmentStatePagerAdapter; 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); Log_OC.e(TAG, "Unexpected error loading " + getFile().getStoragePath(), t);
} }
result = rotateImage(result, storagePath);
return result; 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 @Override
protected void onPostExecute(Bitmap result) { protected void onPostExecute(Bitmap result) {
hideProgressWheel(); hideProgressWheel();