diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index 08116222ca..1e22980694 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -42,6 +42,7 @@ import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; +import android.graphics.Bitmap; import android.net.Uri; import android.os.BatteryManager; import android.os.Build; @@ -1318,6 +1319,25 @@ public class Helper { } } + static int getBytesPerPixel(Bitmap.Config config) { + switch (config) { + case ALPHA_8: + return 1; + case RGB_565: + return 2; + case ARGB_4444: + return 4; + case ARGB_8888: + return 8; + case RGBA_F16: + return 8; + case HARDWARE: + return 0; + default: + return 8; + } + } + // Formatting private static final DecimalFormat df = new DecimalFormat("@@"); diff --git a/app/src/main/java/eu/faircode/email/ImageHelper.java b/app/src/main/java/eu/faircode/email/ImageHelper.java index cf1e3258e2..88becbc8e7 100644 --- a/app/src/main/java/eu/faircode/email/ImageHelper.java +++ b/app/src/main/java/eu/faircode/email/ImageHelper.java @@ -89,6 +89,7 @@ class ImageHelper { static final int DOWNLOAD_TIMEOUT = 15; // seconds private static final int MAX_PROBE = 128 * 1024; // bytes private static final int SLOW_CONNECTION = 2 * 1024; // Kbps + private static final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // RecordingCanvas.MAX_BITMAP_SIZE // https://developer.android.com/guide/topics/media/media-formats#image-formats static final List IMAGE_TYPES = Collections.unmodifiableList(Arrays.asList( @@ -816,7 +817,8 @@ class ImageHelper { @NonNull ImageDecoder.ImageInfo info, @NonNull ImageDecoder.Source source) { int factor = 1; - while (info.getSize().getWidth() / factor > scaleToPixels) + while (info.getSize().getWidth() / factor > scaleToPixels || + info.getSize().getWidth() * info.getSize().getHeight() * 8 / factor > MAX_BITMAP_SIZE) factor *= 2; Log.i("Decode image (decoder) factor=" + factor); @@ -833,7 +835,8 @@ class ImageHelper { BitmapFactory.decodeFile(file.getAbsolutePath(), options); int factor = 1; - while (options.outWidth / factor > scaleToPixels) + while (options.outWidth / factor > scaleToPixels || + options.outWidth * options.outHeight * 8 / factor > MAX_BITMAP_SIZE) factor *= 2; if (factor > 1) {