今天也遇到了这样的问题,在用整张图片当做背景的时候,报错了,还以为内存溢出,但不是,是提示的最大储存位数不够。balabala·····
<!-- hardwareAccelerated是硬件加速,在这儿将其关掉是为了加载大的背景图,如果硬件加速是true
那么会对大的位图限制有限制,不允许大图显示,此时报出Bitmap too large to be uploaded into a texture (2880x5120, max=4096x4096)
的错误,这里简单粗暴的将hardwareAccelerated设置为false。更好的办法可以将图片分成不同的块,每次加载需要的块。
android提供了一个这样的方法http://developer.android.com/reference/android/graphics/BitmapRegionDecoder.html
可以研究下谷歌的这个方法。
-->
我就找了找弄了一个最残暴的方法,将硬件加速器hardwareAccelerated设置为false就不报错了,可以正常运行了。不过还有更好的方法,当然从网上借鉴来的方法,来学习应用到我的程序中。http://blog.zfdang.com/2013/03/summary-of-image-processing-in-android/ 总结的比较大神,看懂了也。分享给大家也作为我的学习笔记。以下为其内容:
第一个问题是out of memory
1 |
java.lang.OutOfMemoryError: bitmap size exceeds VM budget |
这个据说是VM对一个程序申请的所有的bitmap对象会有一个最大值的要求。解决这个问题有几个方法:
1. 从源文件生成图片时,直接将图片缩小,而不是加载原始大小的图片。如下代码:
01 |
Bitmap bitmap = null ; |
02 |
if (mUseZoomOut || mUseZoomIn) {
|
03 |
// decode image size (decode metadata only, not the whole image) |
04 |
o = new BitmapFactory.Options(); |
05 |
o.inJustDecodeBounds = |