Bitmap获取图片内存溢出

从本地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端代码中的内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟旭仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值