aboutsummaryrefslogtreecommitdiffstats
path: root/src/eu/siacs/conversations/persistance/FileBackend.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/eu/siacs/conversations/persistance/FileBackend.java')
-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 3a5800485..c2981a2ab 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) {