android 图片内存溢出解决方案

android 图片内存溢出解决方案

ID:37708800

大小:21.88 KB

页数:5页

时间:2019-05-29

android 图片内存溢出解决方案_第1页
android 图片内存溢出解决方案_第2页
android 图片内存溢出解决方案_第3页
android 图片内存溢出解决方案_第4页
android 图片内存溢出解决方案_第5页
资源描述:

《android 图片内存溢出解决方案》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、java.lang.OutOfMemoryError:bitmapsizeexceedsVMbudget解决方法用BitmapFactory解码一张图片时,有时会遇到该错误。这往往是由于图片过大造成的。要想正常使用,则需要分配更少的内存空间来存储。BitmapFactory.Options.inSampleSize设置恰当的inSampleSize可以使BitmapFactory分配更少的空间以消除该错误。inSampleSize的具体含义请参考SDK文档。例如:?123BitmapFactory.Optionsopts=new BitmapFactory.Options();o

2、pts.inSampleSize=4;Bitmapbitmap=BitmapFactory.decodeFile(imageFile,opts);如何设置恰当的inSampleSize设置恰当的inSampleSize是解决该问题的关键之一。BitmapFactory.Options提供了另一个成员inJustDecodeBounds。?123BitmapFactory.Optionsopts=new BitmapFactory.Options();opts.inJustDecodeBounds=true;Bitmapbitmap=BitmapFactory.decodeFile

3、(imageFile,opts);设置inJustDecodeBounds为true后,decodeFile并不分配空间,但可计算出原始图片的长度和宽度,即opts.width和opts.height。有了这两个参数,再通过一定的算法,即可得到一个恰当的inSampleSize。查看Android源码,Android提供了一种动态计算的方法。?12345678910111213141516171819public static int computeSampleSize(BitmapFactory.Optionsoptions,        int minSideLength,

4、int maxNumOfPixels){    int initialSize=computeInitialSampleSize(options,minSideLength,            maxNumOfPixels);     int roundedSize;    if (initialSize<=8){        roundedSize=1;        while (roundedSize

5、itialSize+7)/8 *8;    }     return roundedSize;} private static int computeInitialSampleSize(BitmapFactory.Optionsoptions,202122232425262728293031323334353637383940414243        int minSideLength,int maxNumOfPixels){    double w=options.outWidth;    double h=options.outHeight;     int lowerBo

6、und=(maxNumOfPixels==-1)?1 :            (int)Math.ceil(Math.sqrt(w*h/maxNumOfPixels));    int upperBound=(minSideLength==-1)?128 :            (int)Math.min(Math.floor(w/minSideLength),            Math.floor(h/minSideLength));     if (upperBound

7、eisnooverlappingzone.        return lowerBound;    }     if ((maxNumOfPixels==-1)&&            (minSideLength==-1)){        return 1;    }else if (minSideLength==-1){        return lowerBound;    }else {        return upperBound;    }}  使用该算法

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。