aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2014-05-20 22:52:57 +0200
committerDaniel Gultsch <daniel@gultsch.de>2014-05-20 22:52:57 +0200
commit7f0efa089f65df73cddd3018b5c5885d8e54c71f (patch)
tree9e46ea767a6fd4882328b39c6166ccccb077a1b7 /src
parent543d77698629ab0dbf1cb10fc61dc2029a93e266 (diff)
trying to deal with larger images
Diffstat (limited to 'src')
-rw-r--r--src/eu/siacs/conversations/persistance/FileBackend.java21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/eu/siacs/conversations/persistance/FileBackend.java b/src/eu/siacs/conversations/persistance/FileBackend.java
index 3a580048..c2981a2a 100644
--- a/src/eu/siacs/conversations/persistance/FileBackend.java
+++ b/src/eu/siacs/conversations/persistance/FileBackend.java
@@ -94,17 +94,30 @@ public class FileBackend {
JingleFile file = getJingleFile(message);
file.getParentFile().mkdirs();
file.createNewFile();
- OutputStream os = new FileOutputStream(file);
- Bitmap originalBitmap = BitmapFactory.decodeStream(is);
+ Bitmap originalBitmap;
+ try {
+ originalBitmap = BitmapFactory.decodeStream(is);
+ is.close();
+ } catch (OutOfMemoryError e) {
+ is.close();
+ Log.d("xmppService","catched out of memory. try again");
+ if (image != null) {
+ is = context.getContentResolver().openInputStream(image);
+ } else {
+ is = new FileInputStream(getIncomingFile());
+ }
+ BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inSampleSize = 2;
+ originalBitmap = BitmapFactory.decodeStream(is, null, options);
+ }
if (originalBitmap == null) {
- os.close();
throw new ImageCopyException(R.string.error_not_an_image_file);
}
- is.close();
if (image == null) {
getIncomingFile().delete();
}
Bitmap scalledBitmap = resize(originalBitmap, IMAGE_SIZE);
+ OutputStream os = new FileOutputStream(file);
boolean success = scalledBitmap.compress(
Bitmap.CompressFormat.WEBP, 75, os);
if (!success) {