feat(helper): 添加位图解码辅助类
- 实现了采样位图解码功能,支持指定宽高要求 - 添加了计算采样大小的算法,优化内存使用 - 设置位图配置为RGB_565以减少内存占用 - 包含边界检查防止无效参数导致异常 - 提供了高效的图片加载解决方案
这个提交包含在:
父节点
7310127d56
当前提交
88ff873959
@ -0,0 +1,41 @@
|
|||||||
|
package com.nova.brain.glass.helper
|
||||||
|
|
||||||
|
import android.graphics.Bitmap
|
||||||
|
import android.graphics.BitmapFactory
|
||||||
|
import kotlin.math.max
|
||||||
|
|
||||||
|
object BitmapDecodeHelper {
|
||||||
|
fun decodeSampledBitmap(path: String, reqWidth: Int, reqHeight: Int): Bitmap? {
|
||||||
|
val boundsOptions = BitmapFactory.Options().apply {
|
||||||
|
inJustDecodeBounds = true
|
||||||
|
}
|
||||||
|
BitmapFactory.decodeFile(path, boundsOptions)
|
||||||
|
|
||||||
|
val decodeOptions = BitmapFactory.Options().apply {
|
||||||
|
inSampleSize = calculateInSampleSize(boundsOptions, reqWidth, reqHeight)
|
||||||
|
inPreferredConfig = Bitmap.Config.RGB_565
|
||||||
|
}
|
||||||
|
return BitmapFactory.decodeFile(path, decodeOptions)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun calculateInSampleSize(
|
||||||
|
options: BitmapFactory.Options,
|
||||||
|
reqWidth: Int,
|
||||||
|
reqHeight: Int
|
||||||
|
): Int {
|
||||||
|
val height = options.outHeight
|
||||||
|
val width = options.outWidth
|
||||||
|
if (height <= 0 || width <= 0 || reqWidth <= 0 || reqHeight <= 0) {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
var inSampleSize = 1
|
||||||
|
if (height > reqHeight || width > reqWidth) {
|
||||||
|
val halfHeight = height / 2
|
||||||
|
val halfWidth = width / 2
|
||||||
|
while (halfHeight / inSampleSize >= reqHeight && halfWidth / inSampleSize >= reqWidth) {
|
||||||
|
inSampleSize *= 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return max(1, inSampleSize)
|
||||||
|
}
|
||||||
|
}
|
||||||
正在加载...
在新工单中引用
屏蔽一个用户