我正在使用存储在 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
请检查"位图太大而无法上传到纹理"
和防止位图太大而无法上传到纹理安卓
您的日志有相同的错误