Bitmap获取图片内存溢出

来源:互联网 发布:淘宝客服结束语大全 编辑:程序博客网 时间:2024/05/16 06:33

从本地sd卡获取图片内存溢出解决方法

 public Bitmap getBitmap(String path) {            File file = new File(path);        Bitmap resizeBmp = null;        BitmapFactory.Options opts = new   BitmapFactory.Options();        // 数字越大读出的图片占用的heap越小 不然总是溢出         opts.inSampleSize = 2;        resizeBmp = BitmapFactory.decodeFile(file.getPath(), opts);        return resizeBmp;    }

如果图片是全屏显示的话

opts.inSampleSize = i;
i数值不要太大,如果是屏幕上的小图片的话尽情呀吧,i=1,压缩倍数是1倍,i=2压缩倍数是4倍,因为i是它边的压缩,整个图的话肯定的边长的平方么,大家懂得。
从资源文件中获取图片时也可能出现内存溢出,尤其是在Listview之类的适配器中进行调用的时候。
BitmapFactory.Options opts = new   BitmapFactory.Options();opts.inSampleSize =5;
</pre><pre name="code" class="java"><span style="white-space:pre">mBgBitmap = BitmapFactory.decodeResource(getActivity().getResources(), imgv[position],opts);t.setImageBitmap(mBgBitmap);</span>
imgv是存放资源文件的数组,t是Imgview。
这块还有一个问题就是内存释放,我用的感觉比较好的是下面这个方法,可以试一下,本人也是一介菜鸟,原理 还没理解,只不过感觉可以解决问题
t.setImageBitmap(null);<span style="white-space:pre"></span>if(mBgBitmap != null  && !mBgBitmap.isRecycled())  <span style="white-space:pre"></span>        {  <span style="white-space:pre"></span>System.out.println("释放内存!");<span style="white-space:pre"></span>mBgBitmap = null; <span style="white-space:pre"></span>        } <span style="white-space:pre"></span>System.gc();
先将所要赋值的控件置为空,防止有关联的文件出现非法释放
再将bitmap置为空,最后释放c端代码中的内存

0 0