kunfei před 4 roky
rodič
revize
705a956af8

+ 2 - 2
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) {

+ 10 - 10
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
 }
 
 /**

+ 1 - 1
app/src/main/java/io/legado/app/utils/QRCodeUtils.kt

@@ -182,7 +182,7 @@ object QRCodeUtils {
         hints: Map<DecodeHintType?, Any?> = 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)