diff --git a/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt b/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt index e04af5b86..a27bb3179 100644 --- a/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt +++ b/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt @@ -568,11 +568,11 @@ object ReadBookConfig { 1 -> { val path = "bg" + File.separator + curBgStr() val bitmap = BitmapUtils.decodeAssetsBitmap(appCtx, path, width, height) - BitmapDrawable(resources, bitmap?.changeSize(width, height)) + BitmapDrawable(resources, bitmap?.copyAndRecycle(width, height)) } else -> { val bitmap = BitmapUtils.decodeBitmap(curBgStr(), width, height) - BitmapDrawable(resources, bitmap?.changeSize(width, height)) + BitmapDrawable(resources, bitmap?.copyAndRecycle(width, height)) } } } catch (e: OutOfMemoryError) { diff --git a/app/src/main/java/io/legado/app/utils/BitmapUtils.kt b/app/src/main/java/io/legado/app/utils/BitmapUtils.kt index e2407c95e..dee6ab206 100644 --- a/app/src/main/java/io/legado/app/utils/BitmapUtils.kt +++ b/app/src/main/java/io/legado/app/utils/BitmapUtils.kt @@ -210,27 +210,27 @@ object BitmapUtils { } -fun Bitmap.changeSize(newWidth: Int, newHeight: Int): Bitmap { +/** + * 获取指定宽高的图片 + */ +fun Bitmap.copyAndRecycle(newWidth: Int, newHeight: Int): Bitmap { val width = this.width val height = this.height //计算压缩的比率 - var scaleWidth = newWidth.toFloat() / width - var scaleHeight = newHeight.toFloat() / height - - if (scaleWidth > scaleHeight) { - scaleWidth = scaleHeight - } else { - scaleHeight = scaleWidth - } + val scaleWidth = newWidth.toFloat() / width + val scaleHeight = newHeight.toFloat() / height //获取想要缩放的matrix val matrix = Matrix() matrix.postScale(scaleWidth, scaleHeight) //获取新的bitmap - return Bitmap.createBitmap(this, 0, 0, width, height, matrix, true) + val bitmap = Bitmap.createBitmap(this, 0, 0, width, height, matrix, true) + + recycle() + return bitmap } /** diff --git a/app/src/main/java/io/legado/app/utils/QRCodeUtils.kt b/app/src/main/java/io/legado/app/utils/QRCodeUtils.kt index a6a8747a0..072a2f725 100644 --- a/app/src/main/java/io/legado/app/utils/QRCodeUtils.kt +++ b/app/src/main/java/io/legado/app/utils/QRCodeUtils.kt @@ -182,7 +182,7 @@ object QRCodeUtils { hints: Map = DecodeFormatManager.ALL_HINTS ): Result? { if (bitmap.width > reqWidth || bitmap.height > reqHeight) { - val bm = bitmap.changeSize(reqWidth, reqHeight) + val bm = bitmap.copyAndRecycle(reqWidth, reqHeight) return parseCodeResult(getRGBLuminanceSource(bm), hints) } return parseCodeResult(getRGBLuminanceSource(bitmap), hints)