图片压缩(二次采样)

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">很多时候我们在加载图片的时候并不需要把原图加载出来,例如像打开微信图片列表,可能由于控件的大小,用户视觉等等的原因,把一张原图加载出来和加载一张缩略图的效果是差不多的,这时候加载一张原图的话反而只会耗费过多的内存空间,像微信图片列表一页能够显示15张(3x5),原图的话3m左右,那一页就要耗费45m的内存了,所以这时候</span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">就需要将图片进行压缩处理了。</span>

Bitmap二次采样

第一次采样:是为了得到从     Bitmap图像尺寸--->指定图片大小尺寸    的缩放比例。
第二次采样:利用得到缩放比例对Bitmap图像进行缩放。

  //******第一次采样*******
        File file = new File("/mnt/shared/Image/map.bmp");            //这里是指我手机中一张127mb的图片的路径
        BitmapFactory.Options option = new BitmapFactory.Options();   //获取option对象
        option.inJustDecodeBounds = true;                             //设置为值获取图片的边界像素点,是为了后面计算出图片的宽高
        Bitmap bitmap = null ;
        bitmap = BitmapFactory.decodeFile(file.getAbsolutePath(),option);
        Log.d("bigname_log", "btnOnClick: "+option.outHeight+"."+option.outWidth); //6500,7400大概的,忘记了具体多少
        int fastWidth = imageview.getWidth();                         //指定尺寸  256*256
        int fastHeight = imageview.getHeight();
        int simpleSize = 1 ;                                          //缩放比例*注意缩放比例只能是2的n次方,如果不是则自动就近取值。
        while (option.outWidth / simpleSize > fastWidth || option.outHeight / simpleSize > fastHeight) {    <span style="font-family: Arial, Helvetica, sans-serif;">//计算缩放比例</span>
            simpleSize *= 2;                                          
        }
        option.inSampleSize = simpleSize ;                           //将计算得到的缩放比例设置到option中
        Log.d("bigname_log", "btnOnClick: 缩放比例"+simpleSize);     
        //*********第二次采样********
        option.inJustDecodeBounds = false;                           //重新把计算边界像素设为false,不然图片无法显示
        option.inPreferredConfig = Bitmap.Config.ARGB_8888 ;         //可以不设
        bitmap = BitmapFactory.decodeFile(file.getAbsolutePath(), option);
        Log.d("bigname_log", "btnOnClick: "+option.outHeight+"."+option.outWidth);    //最后bitmap压缩为:176*248
        imageview.setImageBitmap(bitmap);
但压缩后的bitmap显示效果并没差多少。
另外再说一下  option.inPreferredConfig = Bitmap.Config.ARGB_8888 ; 
这是设置图片色彩的属性。
A:透明度 8位
R:红色    8位
G:绿色    8位
B:蓝色    8位
还有三种设置值:
ARGB_4444    分别占4位的意思
RGB_565   分别占5、6、5位  ,没有透明度的图片
ALPHA_8   透明度占8位 ,只是用于只有透明度的图片
这四种色彩设置占位越多则色彩效果越好,是偏向内存还是色彩效果就看自己的取舍了。









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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值