首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用程序在使用ImageDecoder#createSource时崩溃(contentResolver,uri)

应用程序在使用ImageDecoder#createSource时崩溃(contentResolver,uri)
EN

Stack Overflow用户
提问于 2020-02-08 08:33:53
回答 1查看 213关注 0票数 1

试图替换用于从Uri检索图像的不推荐代码

( MediaStore#Images#Media#getBitmap(contentResolver,)

)

用新的

ImageDecoder#createSource(contentResolver,uri)

这是我的新代码:

代码语言:javascript
复制
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,)).

EN

回答 1

Stack Overflow用户

发布于 2021-12-23 05:03:19

因为它会为某些设备抛出OOM,因此要解决这个问题,可以在使用sampleSize进行解码时设置ImageDecoder。

代码语言:javascript
复制
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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60125192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档