从文件加载巨大的图像

时间:2016-04-26 16:36:04

标签: android android-5.0-lollipop android-6.0-marshmallow openglrenderer

我正在使用存储在 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)

现在问题: 有没有办法避免这个错误,没有质量下降(我将需要这个质量,因为你可以缩放图像)

3 个答案:

答案 0 :(得分:0)

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

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

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

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

以下链接详细介绍了推荐使用的技术:developer.android.com/training/displaying-bitmaps/load-bitmap.html

答案 1 :(得分:0)

答案 2 :(得分:0)

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

这个程序很简单,而且速度很快,并且希望没有任何OOM

只需在build.gradle

中进行编译即可
 compile 'com.github.bumptech.glide:glide:3.7.0'

然后

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

就是这样,你再也不会面对OOM了,我在我的很多应用程序中使用过图像,但我从来没有遇到OOM

希望有所帮助