Android图片的压缩

本文介绍了一种有效的图片压缩方法,通过设置解析选项避免内存溢出,同时保持图片质量。该方法分为两步:首先获取图片尺寸但不加载到内存,接着根据所需尺寸计算压缩比例并加载压缩后的图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                 图片的压缩



相关知识点:http://blog.youkuaiyun.com/yezhouyong/article/details/50402022
            http://blog.youkuaiyun.com/jdsjlzx/article/details/44228935
            http://www.cnblogs.com/mmy0925/archive/2013/01/22/2870815.html (讲解decodeFile())

样板:
     (这里所传的参数reqWidth和reqHeigt为我们获取的控件实际宽度,不知道获取的控件实际宽度看 点击打开链接

     BitmapFactory.Options options=new BitmapFactory.Options();
        //获取得图片的宽高,并不把图片加载到内存中
        options.inJustDecodeBounds=true;
        BitmapFactory.decodeFile(path,options);
        options.inSampleSize=caculateInSampleSize(options,width,height);
        //把图片加载到内存中
        options.inJustDecodeBounds=false;
        //使用获取到的压缩比值再次解析图片                                                                                                                       
        Bitmap bitmap=BitmapFactory.decodeFile(path,options);
        return bitmap;

图片压缩分两大步:

   1.我们去解析一个图片,如果太大,就会outOfMemory,所以我们拿到图片时,就不能先存放在内     存中。设置:
     //获取得图片的宽高,并不把图片加载到内存中
        options.inJustDecodeBounds=true;
 
   2.然后我们设置压缩比(options.inSampleSize)
    options.inSampleSize=caculateInSampleSize(options,width,height);
    private int caculateInSampleSize(BitmapFactory.Options options, int reqWidth, int         reqHeight) {
        int width=options.outWidth;
        int height=options.outHeight;
        int  inSampleSize=0;
        if (width>reqWidth||height>reqHeight){
            int widthRadio=Math.round(width*1.0f/reqWidth);
            int heightRadio=Math.round(height*1.0f/reqHeight);
            //inSampleSize如果去最大值Max就是将图片压缩到最小,如果取最小值Min就是让
            //图片原比例压缩,但会比Max值压缩的图片更耗内存,这里我们为了节约内存用Max值
            inSampleSize=Math.max(widthRadio,heightRadio);
        }
        return inSampleSize;
    }

   







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值