From 2d2f27800ef5ede1683bfc5c58a8da6d894a7630 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 23 May 2022 17:09:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/help/config/ReadBookConfig.kt | 4 ++-- .../java/io/legado/app/utils/BitmapUtils.kt | 20 +++++++++---------- .../java/io/legado/app/utils/QRCodeUtils.kt | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) 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)