标签:des android style c class blog
压缩原因:
1.imageview大小如果是200*300那么加载个2000*3000的图片到内存中显然是浪费可耻滴行为;
2.最重要的是图片过大时直接加载原图会造成OOM异常(out of
memory内存溢出)
所以一般对于大图我们需要进行下压缩处理
权威处理方法参考 安卓开发者中心的大图片处理教程
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
看不懂英文的话木有关系,本篇会有介绍
主要处理思路是:
1.获取图片的像素宽高(不加载图片至内存中,所以不会占用资源)
2.计算需要压缩的比例
3.按将图片用计算出的比例压缩,并加载至内存中使用
官网大图片加载教程(上面网址里的)对应代码就是:
1 /** 2 * 获取压缩后的图片 3 * @param res 4 * @param resId 5 * @param reqWidth 所需图片压缩尺寸最小宽度 6 * @param reqHeight 所需图片压缩尺寸最小高度 7 * @return 8 */ 9 public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, 10 int reqWidth, int reqHeight) { 11 12 // 首先不加载图片,仅获取图片尺寸 13 final BitmapFactory.Options options = new BitmapFactory.Options(); 14 // 当inJustDecodeBounds设为true时,不会加载图片仅获取图片尺寸信息 15 options.inJustDecodeBounds = true; 16 // 此时仅会将图片信息会保存至options对象内,decode方法不会返回bitmap对象 17 BitmapFactory.decodeResource(res, resId, options); 18 19 // 计算压缩比例,如inSampleSize=4时,图片会压缩成原图的1/4 20 options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); 21 22 // 当inJustDecodeBounds设为false时,BitmapFactory.decode...就会返回图片对象了 23 options. inJustDecodeBounds = false; 24 // 利用计算的比例值获取压缩后的图片对象 25 return BitmapFactory.decodeResource(res, resId, options); 26 }
1 /** 2 * 计算压缩比例值 3 * @param options 解析图片的配置信息 4 * @param reqWidth 所需图片压缩尺寸最小宽度 5 * @param reqHeight 所需图片压缩尺寸最小高度 6 * @return 7 */ 8 public static int calculateInSampleSize(BitmapFactory.Options options, 9 int reqWidth, int reqHeight) { 10 // 保存图片原宽高值 11 final int height = options. outHeight; 12 final int width = options. outWidth; 13 // 初始化压缩比例为1 14 int inSampleSize = 1; 15 16 // 当图片宽高值任何一个大于所需压缩图片宽高值时,进入循环计算系统 17 if (height > reqHeight || width > reqWidth) { 18 19 final int halfHeight = height / 2; 20 final int halfWidth = width / 2; 21 22 // 压缩比例值每次循环两倍增加, 23 // 直到原图宽高值的一半除以压缩值后都~大于所需宽高值为止 24 while ((halfHeight / inSampleSize) >= reqHeight 25 && (halfWidth / inSampleSize) >= reqWidth) { 26 inSampleSize *= 2; 27 } 28 } 29 30 return inSampleSize; 31 }
Android Bitmap 全面解析(一)加载大尺寸图片,布布扣,bubuko.com
标签:des android style c class blog
原文地址:http://www.cnblogs.com/androidxiaoyang/p/3752905.html