读书人

bitmap size exceeds VM budget 的解决

发布时间: 2012-07-02 17:46:22 作者: rapoo

bitmap size exceeds VM budget 的解决办法

转载至:?http://developer.aiwgame.com/

昨天遇到这个问题就是从一个输入流里调用BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri))得到一个bitmap报的错。第一次调用都没问题,第二次再次调用就会报上面那个内存溢出的问题。而且有的手机报有的手机不报。研究了半天终于解决。首先分析了下原因,应该是图片占用的内存超过了系统虚拟机可分配的最大限制。不同手机可能分配的最大值不一样。后来找到解决办法主要是设置BitmapFactory.Options

?

?

BitmapFactory.Options options=new BitmapFactory.Options();options.inSampleSize = 8;Bitmap preview_bitmap=BitmapFactory.decodeStream(is,null,options);

?

上面写死了,其实可以根据内容来动态设置更好。

?

?

//decodes image and scales it to reduce memory consumptionprivate Bitmap decodeFile(File f){    try {        //Decode image size        BitmapFactory.Options o = new BitmapFactory.Options();        o.inJustDecodeBounds = true;        BitmapFactory.decodeStream(new FileInputStream(f),null,o);        //The new size we want to scale to        final int REQUIRED_SIZE=70;        //Find the correct scale value. It should be the power of 2.        int scale=1;        while(o.outWidth/scale/2>=REQUIRED_SIZE && o.outHeight/scale/2>=REQUIRED_SIZE)            scale*=2;        //Decode with inSampleSize        BitmapFactory.Options o2 = new BitmapFactory.Options();        o2.inSampleSize=scale;        return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);    } catch (FileNotFoundException e) {}    return null;}

?

这样bitmap size exceeds VM budget的文件就解决了

读书人网 >移动开发

热点推荐