rotate thumbnails. fixes #1438

This commit is contained in:
Daniel Gultsch 2015-09-29 12:25:32 +02:00
parent 5fb77a9739
commit 64dbb069ab
1 changed files with 15 additions and 6 deletions

View File

@ -260,6 +260,10 @@ public class FileBackend {
} }
} }
private int getRotation(File file) {
return getRotation(Uri.parse("file://"+file.getAbsolutePath()));
}
private int getRotation(Uri image) { private int getRotation(Uri image) {
InputStream is = null; InputStream is = null;
try { try {
@ -274,8 +278,7 @@ public class FileBackend {
public Bitmap getThumbnail(Message message, int size, boolean cacheOnly) public Bitmap getThumbnail(Message message, int size, boolean cacheOnly)
throws FileNotFoundException { throws FileNotFoundException {
Bitmap thumbnail = mXmppConnectionService.getBitmapCache().get( Bitmap thumbnail = mXmppConnectionService.getBitmapCache().get(message.getUuid());
message.getUuid());
if ((thumbnail == null) && (!cacheOnly)) { if ((thumbnail == null) && (!cacheOnly)) {
File file = getFile(message); File file = getFile(message);
BitmapFactory.Options options = new BitmapFactory.Options(); BitmapFactory.Options options = new BitmapFactory.Options();
@ -285,8 +288,12 @@ public class FileBackend {
throw new FileNotFoundException(); throw new FileNotFoundException();
} }
thumbnail = resize(fullsize, size); thumbnail = resize(fullsize, size);
this.mXmppConnectionService.getBitmapCache().put(message.getUuid(), fullsize.recycle();
thumbnail); int rotation = getRotation(file);
if (rotation > 0) {
thumbnail = rotate(thumbnail, rotation);
}
this.mXmppConnectionService.getBitmapCache().put(message.getUuid(),thumbnail);
} }
return thumbnail; return thumbnail;
} }
@ -512,8 +519,10 @@ public class FileBackend {
BitmapFactory.Options options = new BitmapFactory.Options(); BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true; options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(file.getAbsolutePath(), options); BitmapFactory.decodeFile(file.getAbsolutePath(), options);
int imageHeight = options.outHeight; int rotation = getRotation(file);
int imageWidth = options.outWidth; boolean rotated = rotation == 90 || rotation == 270;
int imageHeight = rotated ? options.outWidth : options.outHeight;
int imageWidth = rotated ? options.outHeight : options.outWidth;
if (url == null) { if (url == null) {
message.setBody(Long.toString(file.getSize()) + '|' + imageWidth + '|' + imageHeight); message.setBody(Long.toString(file.getSize()) + '|' + imageWidth + '|' + imageHeight);
} else { } else {