Fixes a crash when reorienting and downsizing an image for upload. Closes #247

This commit is contained in:
Vavassor 2017-05-02 20:06:48 -04:00
parent ab76121692
commit f7915d614d
1 changed files with 11 additions and 5 deletions

View File

@ -86,7 +86,9 @@ class DownsizeImageTask extends AsyncTask<Uri, Void, Boolean> {
try {
Bitmap result = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
bitmap.recycle();
if (!bitmap.sameAs(result)) {
bitmap.recycle();
}
return result;
} catch (OutOfMemoryError e) {
return null;
@ -180,17 +182,21 @@ class DownsizeImageTask extends AsyncTask<Uri, Void, Boolean> {
if (scaledBitmap == null) {
return false;
}
reorientBitmap(scaledBitmap, orientation);
Bitmap reorientedBitmap = reorientBitmap(scaledBitmap, orientation);
if (reorientedBitmap == null) {
scaledBitmap.recycle();
return false;
}
Bitmap.CompressFormat format;
/* It's not likely the user will give transparent images over the upload limit, but
* if they do, make sure the transparency is retained. */
if (!scaledBitmap.hasAlpha()) {
if (!reorientedBitmap.hasAlpha()) {
format = Bitmap.CompressFormat.JPEG;
} else {
format = Bitmap.CompressFormat.PNG;
}
scaledBitmap.compress(format, 75, stream);
scaledBitmap.recycle();
reorientedBitmap.compress(format, 75, stream);
reorientedBitmap.recycle();
scaledImageSize /= 2;
iterations++;
} while (stream.size() > sizeLimit);