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;
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
import com.owncloud.android.ui.fragment.FileFragment;
+import com.owncloud.android.utils.BitmapUtils;
import com.owncloud.android.utils.TouchImageViewCustom;
File picture = new File(storagePath);
if (picture != null) {
- //Decode file into a bitmap in real size for being able to make zoom on the image
+ // Decode file into a bitmap in real size for being able to make zoom on
+ // the image
result = BitmapFactory.decodeStream(new FlushedInputStream
(new BufferedInputStream(new FileInputStream(picture))));
}
if (result == null) {
mErrorMessageId = R.string.preview_image_error_unknown_format;
Log_OC.e(TAG, "File could not be loaded as a bitmap: " + storagePath);
+ } else {
+ // Rotate image, obeying exif tag.
+ result = BitmapUtils.rotateImage(result, storagePath);
}
} catch (OutOfMemoryError e) {
Log_OC.e(TAG, "Out of memory occured for file " + storagePath, e);
- // If out of memory error when loading image, try to load it scaled
+ // If out of memory error when loading or rotating image, try to load it scaled
result = loadScaledImage(storagePath);
if (result == null) {
mErrorMessageId = R.string.preview_image_error_unknown_format;
Log_OC.e(TAG, "File could not be loaded as a bitmap: " + storagePath);
+ } else {
+ // Rotate scaled image, obeying exif tag
+ result = BitmapUtils.rotateImage(result, storagePath);
}
} catch (NoSuchFieldError e) {
mErrorMessageId = R.string.common_error_unknown;
- Log_OC.e(TAG, "Error from access to unexisting field despite protection; file " + storagePath, e);
+ Log_OC.e(TAG, "Error from access to unexisting field despite protection; file "
+ + storagePath, e);
} catch (Throwable t) {
mErrorMessageId = R.string.common_error_unknown;
}
- 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();