diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/imagecache/DownloadImageTask.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/imagecache/DownloadImageTask.java index 3b3baa41f..9c9bdc942 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/imagecache/DownloadImageTask.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/imagecache/DownloadImageTask.java @@ -1,10 +1,15 @@ package net.kdt.pojavlaunch.modloaders.modpacks.imagecache; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + import net.kdt.pojavlaunch.utils.DownloadUtils; +import java.io.FileOutputStream; import java.io.IOException; class DownloadImageTask implements Runnable { + private static final float BITMAP_FINAL_DIMENSION = 256f; private final ReadFromDiskTask mParentTask; private int mRetryCount; DownloadImageTask(ReadFromDiskTask parentTask) { @@ -28,6 +33,25 @@ class DownloadImageTask implements Runnable { try { IconCacheJanitor.waitForJanitorToFinish(); DownloadUtils.downloadFile(mParentTask.imageUrl, mParentTask.cacheFile); + Bitmap bitmap = BitmapFactory.decodeFile(mParentTask.cacheFile.getAbsolutePath()); + if(bitmap == null) return false; + int bitmapWidth = bitmap.getWidth(), bitmapHeight = bitmap.getHeight(); + if(bitmapWidth <= BITMAP_FINAL_DIMENSION && bitmapHeight <= BITMAP_FINAL_DIMENSION) { + bitmap.recycle(); + return true; + } + float imageRescaleRatio = Math.min(BITMAP_FINAL_DIMENSION/bitmapWidth, BITMAP_FINAL_DIMENSION/bitmapHeight); + Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, + (int)(bitmapWidth * imageRescaleRatio), + (int)(bitmapHeight * imageRescaleRatio), + true); + bitmap.recycle(); + if(resizedBitmap == bitmap) return true; + try (FileOutputStream fileOutputStream = new FileOutputStream(mParentTask.cacheFile)) { + resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 80, fileOutputStream); + } finally { + resizedBitmap.recycle(); + } return true; }catch (IOException e) { e.printStackTrace();