From bce856c94ccdd3060ab97a215df7555ec3d2ff7c Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Thu, 21 Feb 2013 17:00:47 -0800 Subject: [PATCH] Retry bitmap encode with more compression if out of memory errors occur --- .../andlib/utility/AndroidUtilities.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/api/src/com/todoroo/andlib/utility/AndroidUtilities.java b/api/src/com/todoroo/andlib/utility/AndroidUtilities.java index 1f0a9fb53..25aeb29f3 100644 --- a/api/src/com/todoroo/andlib/utility/AndroidUtilities.java +++ b/api/src/com/todoroo/andlib/utility/AndroidUtilities.java @@ -143,10 +143,20 @@ public class AndroidUtilities { } public static String encodeBase64Bitmap(Bitmap bitmap) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); - byte[] bytes = baos.toByteArray(); - return Base64.encodeToString(bytes, Base64.DEFAULT); + String result = ""; //$NON-NLS-1$ + int tries = 0; + while ("".equals(result) && tries < 5) { //$NON-NLS-1$ + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100 - (10 * tries), baos); + byte[] bytes = baos.toByteArray(); + try { + result = Base64.encodeToString(bytes, Base64.DEFAULT); + } catch (OutOfMemoryError e) { + // Too big, try after recompressing + } + tries++; + } + return result; } public static Bitmap decodeBase64Bitmap(String encoded) {