试图替换用于从Uri检索图像的不推荐代码
( MediaStore#Images#Media#getBitmap(contentResolver,)
)
用新的
ImageDecoder#createSource(contentResolver,uri)
这是我的新代码:
Bitmap thumbNail;
if (Build.VERSION.SDK_INT < 28) {
thumbNail = MediaStore.Images.Media.getBitmap(
getContentResolver(),
data.getData()
);
} else {
ImageDecoder.Source source = ImageDecoder.createSource(getContentResolver(), data.getData());
thumbNail = ImageDecoder.decodeBitmap(source);
}但我注意到,每当我尝试使用它来处理一个大小相对较大的2MB到3.5MB的图像时,我都会注意到。应用程序崩溃哪条消息
频道无法恢复,并将被处理!
我可能做错了什么,还是它不适合处理较大的图像文件?当我决定使用不推荐的方法时,应用程序工作得很好:
( MediaStore#Images#Media#getBitmap(contentResolver,)).
发布于 2021-12-23 05:03:19
因为它会为某些设备抛出OOM,因此要解决这个问题,可以在使用sampleSize进行解码时设置ImageDecoder。
val source = ImageDecoder.createSource(context.contentResolver, imageUri)
val listener = ImageDecoder.OnHeaderDecodedListener { decoder, info, source ->
var scaleFactor = (info.size.width / 1280).coerceAtMost(info.size.height / 1280)
if (scaleFactor < 1) scaleFactor = 1
decoder.setTargetSampleSize(scaleFactor)
decoder.setOnPartialImageListener {
true
}
}
ImageDecoder.decodeBitmap(source)参考资料:https://developer.android.com/reference/android/graphics/ImageDecoder#setTargetSampleSize(int)
https://stackoverflow.com/questions/60125192
复制相似问题