Android 图片经典压缩小结

在移动设备上进行图片相关软件的开发,一定得先压缩图片,毕竟移动设备的内存有限,稍不注意就会导致内存溢出,刚好用到这里,就学习了一下相关的压缩图片,现在总结出来和大家共享。

     一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用 BitmapFactory的decodeFile方法,然后通过传递进去 BitmapFactory.Option类型的参数进行取缩略图,在Option中,属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4。 Options中有个属性inJustDecodeBounds,SDK中的英文引用如下:
If set totrue, the decoder will return null (no bitmap), but the out... fields will stillbe set, allowing the caller to query the bitmap without having to allocate thememory for its pixels.
大致意思就是说如果该值设为true那么将不返回实际的bitmap不给其分配内存空间而里面只包括一些解码边界信息即图片大小信息,那么相应的方法也就出来了,通过设置inJustDecodeBounds为true,获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度),然后计算一个inSampleSize(缩放值),然后就可以取图片了,这里要注意的是,inSampleSize 可能小于0,必须做判断。

                 BitmapFactory.Options options = new BitmapFactory.Options();
                 options.inJustDecodeBounds = true;
                 pic[i]  = BitmapFactory.decodeFile(path[i], options); //此时返回bm为空
                 options.inJustDecodeBounds = false;
                //缩放比
                 int be = (int)(options.outHeight / (float)215);
                  if (be <= 0)
                      be = 1;
                 options.inSampleSize = be;
                 options.inSampleSize = computeSampleSize(options, -1, 300*350); 
                  //重新读入图片,注意这次要把options.inJustDecodeBounds 设为 false哦
                 pic[i]  = BitmapFactory.decodeFile(path[i], options);

这是option的UML图:

Android压缩图片的几种方法
           

这样出来的图片一般不会失真,但是当你压缩的长宽比例相差较大时还会有失真现象。

这个是等比例缩放:
bitmap = Bitmap.createScaledBitmap(bitmap, width, height, false);width和height是缩放后的大小,true表示过滤,可消除锯齿感。

newBitmap = Bitmap.createBitmap(oldBitmap, 0, 0, width, height, matrix, true);//用距阵的方式缩放

这个是截取图片某部分:
bitmap = Bitmap.createBitmap(bitmap, x, y, width, height);,意思是从(x,y)开始截取width宽和height高大小的图片。

这些就是android系统中压缩图片的几个方法了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值