从文件加载巨大的图像



我正在使用存储在 Environment.getDataDirectory() 上的图片,它们的宽度为 1920 英寸,高 1080 英寸,我想使用以下代码将它们加载到图像视图中:

File imgFile = new File(Environment.getDataDirectory() + "/data/com.My.Package/files/Pictures/Sun.jpg");                
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
                zoomImage.setImageBitmap(myBitmap);

但是在Android 6.0(三星Galaxy S6 Edge)上,我收到此错误,在Android 5(HTC One)上,它运行良好

W/OpenGLRenderer:位图太大而无法上传到纹理中(3240x5760,最大=4096x4096)

所以现在来回答这个问题:有没有办法避免此错误并且没有质量下降(我需要这种质量,因为您可以缩放图像)

我认为您应该尝试使用Glide加载它。

该过程非常简单,速度很快,希望不会有任何OOM

只需将其编译在您的build.gradle

 compile 'com.github.bumptech.glide:glide:3.7.0'

然后

Glide
    .with(this)
    .load(imgFile)
    .into(zoomImage);

就是这样,你永远不会再面对OOM希望,我在我的许多应用程序中处理过图像,但我从未遇到过OOM

希望对你有帮助

正如您的错误指出的那样,您的图像太大而无法加载。

基本上现在您正在将整个图像加载到内存中。

您必须获得位图的较小/缩小版本。

您可以使用 BitmapFactory.Options 轻松完成此操作,

这是一个链接,详细介绍了为此推荐的技术:developer.android.com/training/displaying-bitmaps/load-bitmap.html

请检查"位图太大而无法上传到纹理"

和防止位图太大而无法上传到纹理安卓

您的日志有相同的错误

最新更新