Android 加载大图问题

关于如何加载大图片及其原理,可以参考: Android 高清加载巨图方案 拒绝压缩图片 以及开源项目LargeImage,第一次使用的时候能正常显示,但后来却无法显示(图片替换了),也没显示错误,查看bug,有一个信息: IllegalArgumentException: rectangle is not inside the image,不过不要被这条信息蒙蔽了,你在进行调试的时候,你会发现其实并未真正的超出范围,但还是输出这样的结果。当时屏幕是可以滑动的(无法显示图片,但图片高度还是填充了界面中的scrollview),此刻发现log会一直警告:

 Bitmap too large to be uploaded into a texture (440x6405, max=4096x4096)

由此就真相大白了,原来是因为当开启硬件加速的时候,GPU对于openglRender 有一个限制,这个不同的手机会有不同的限制:

这个限制值可以通过canvas.getMaximumBitmapHeight()和canvas.getMaximumBitmapWidth()来获得。

解决方案有两条:http://blog.csdn.net/ta893115871/article/details/9043559

1、一个解决的方法是禁止硬件加速,简单粗暴:<application android:hardwareAccelerated="false" ...>

2、将图片分成不同的块,每次加载需要的块。android提供了一个方法(其实加载大图片就是采取这样的方案,但还是出现上述问题,这个问题没想明白)


你可能感兴趣的:(Android 加载大图问题)