我正在使用存储在 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,max = 4096x4096)
现在问题: 有没有办法避免这个错误,没有质量下降(我将需要这个质量,因为你可以缩放图像)
答案 0 :(得分:0)
正如您的错误指出的那样,您的图片太大而无法加载。
现在基本上你将整个图像加载到内存中。
您必须获得位图的较小/缩小版本。
您可以使用BitmapFactory.Options轻松完成此操作,
以下链接详细介绍了推荐使用的技术:developer.android.com/training/displaying-bitmaps/load-bitmap.html
答案 1 :(得分:0)
请检查"Bitmap too large to be uploaded into a texture"
和Prevent bitmap too large to be uploaded into a texture android
它与您的日志有相同的错误
答案 2 :(得分:0)
我认为您应该尝试使用Glide加载它。
这个程序很简单,而且速度很快,并且希望没有任何OOM
只需在build.gradle
compile 'com.github.bumptech.glide:glide:3.7.0'
然后
Glide
.with(this)
.load(imgFile)
.into(zoomImage);
就是这样,你再也不会面对OOM
了,我在我的很多应用程序中使用过图像,但我从来没有遇到OOM
。
希望有所帮助