图片的二次采样,防止图片加载导致内存不足

                                           图片的二次采样,防止图片加载导致内存不足       

图片加载中由于图片太大导致的会导致设备的内存不足,所以这里就需要对图片的大小进行一定的裁剪,通常称之为图片的二次采样,

       其中第一次采样是只是单纯的获取图片的宽和高,对图片并没有什么非分之想...委屈  ,首先需要用到采样的条件,通                    过 BitmapFactory.Options得到一个

opts(姑且这样叫),然后通过这个 opts.inJustDecodeBounds = true;这里的话,inJustDecodeBounds字面意思就知道仅仅获取图片的        边缘(也就是宽和高),

      第一次采样让它为true,只获取图片原始的宽和高,第二次采样的时候就要将它置为false,要真正开始采样了..

      采样的时候有一个采样比率,默认是1, 如果是 1 的话,他就是图片原始的宽高,如果是 2 的话,他就是取图片宽和高的1/2,也就是宽取一       半,高取一半,这样获取的图片就是原始图片的1/4 大了,以此类推,如果是4 的话,获取的图片大小就是原始图片的1/16了,采样比率都是       2的倍数...

      代码:

      

 //galaxy2这张图片,不进行压缩,大小是2.78M
        //图片===图片的二次采样

        //第一次,假采,并不会生成bitmap ,目的图片的宽高

        //采样的条件
        BitmapFactory.Options opts = new BitmapFactory.Options();

        //仅仅采集边界===宽高
        opts.inJustDecodeBounds = true;//

        Bitmap bitmap = BitmapFactory
                .decodeResource(getResources(), R.mipmap.galaxy2,opts);

        Log.d("flag", "----------------->download: 第一次采样的bitmap: " +bitmap);

        int rawHeight = opts.outHeight;//图片原始的高度
        int rawWidth = opts.outWidth;//图片原始的宽度

        Log.d("flag", "----------------->download: 原始图片的宽: " +rawWidth+", 高: "+rawHeight);
        //第二次
        opts.inJustDecodeBounds = false;//采集的bitmap图片

        int inSampleSize = 1;

        //计算采样比率
        //标准100*100; 300*300;100*200
        //标准 100*100px
        while (rawHeight>=100*inSampleSize&&rawWidth>=200*inSampleSize){
            inSampleSize*=2;
        }
        Log.d("flag", "----------------->download: 采样比率: " +inSampleSize);
        opts.inSampleSize = inSampleSize;//采样比率= 2 图片原图1/4

        //第二次采集图片
        mBitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.galaxy2,opts);

        //采样比率16采样之后的大小是:0.01M
        //采样比率8采样之后的大小是:0.04M
        Log.d("flag", "----------------->download: bitmap进行二次采样的大小是: " +
                mBitmap.getByteCount()*1.0f/1024/1024);

        img.setImageBitmap(mBitmap);
//标准100*100; 300*300;100*200  这个就是想让采样后的图片多大
如果理想的图片宽 和 高乘以采样的比率比原始图片的宽.高小,那么继续将采样的比率乘以2,继续采..直到符合条件为止,然后所得的tp就是想要的图片大小

.. 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值