Android中对原始图片的缩放

我们知道在图片在网络上传的时候如果图片过大,则对整体流量和资源的占用都比较厉害甚至出现oom内存溢出所以在上传的时候或者仅仅是对sd卡内部图片的预览时均需要进行缩放具体的代码如下:可以按比例缩小也可以按一定的规则进行变化,lru方法调用这个类后在进行算法的优化来如内存为10兆当装满后再来图片则去掉最后的item这样就可以最大程度的保障手机内存的加载图片的优越性

public class BitmapUtilities {

 public BitmapUtilities() {
  // TODO Auto-generated constructor stub
 }
 
 public static Bitmap getBitmapThumbnail(String path,int width,int height){
  Bitmap bitmap = null;
  //这里可以按比例缩小图片:
  /*BitmapFactory.Options opts = new BitmapFactory.Options();
  opts.inSampleSize = 4;//宽和高都是原来的1/4
  bitmap = BitmapFactory.decodeFile(path, opts); */
  
  /*进一步的,
             如何设置恰当的inSampleSize是解决该问题的关键之一。BitmapFactory.Options提供了另一个成员inJustDecodeBounds。
            设置inJustDecodeBounds为true后,decodeFile并不分配空间,但可计算出原始图片的长度和宽度,即opts.width和opts.height。
            有了这两个参数,再通过一定的算法,即可得到一个恰当的inSampleSize。*/
  BitmapFactory.Options opts = new BitmapFactory.Options();
     opts.inJustDecodeBounds = true;
     BitmapFactory.decodeFile(path, opts);
     opts.inSampleSize = Math.max((int)(opts.outHeight / (float) height), (int)(opts.outWidth / (float) width));
     opts.inJustDecodeBounds = false;
     bitmap = BitmapFactory.decodeFile(path, opts);
  return bitmap;
 }
 
 public static Bitmap getBitmapThumbnail(Bitmap bmp,int width,int height){
  Bitmap bitmap = null;
  if(bmp != null ){
   //原始图片的宽度和高度
   int bmpWidth = bmp.getWidth();
   int bmpHeight = bmp.getHeight();
   if(width != 0 && height !=0){
    Matrix matrix = new Matrix();
    float scaleWidth = ((float) width / bmpWidth);
    float scaleHeight = ((float) height / bmpHeight);
    matrix.postScale(scaleWidth, scaleHeight);
    bitmap = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight, matrix, true);
   }else{
    bitmap = bmp;
   }
  }
  return bitmap;
 }

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值