二次采样代码实现

来源:互联网 发布:windows nt4.0 编辑:程序博客网 时间:2024/06/05 23:57
[java] view plain copy
 print?
  1. public class BitmapUtils {  
  2.     /** 
  3.      * @param filePath   要加载的图片路径 
  4.      * @param destWidth  显示图片的控件宽度 
  5.      * @param destHeight 显示图片的控件的高度 
  6.      * @return 
  7.      */  
  8.     public static Bitmap getBitmap(String filePath, int destWidth, int destHeight) {  
  9.         //第一次采样  
  10.         BitmapFactory.Options options = new BitmapFactory.Options();  
  11.         //该属性设置为true只会加载图片的边框进来,并不会加载图片具体的像素点  
  12.         options.inJustDecodeBounds = true;  
  13.         //第一次加载图片,这时只会加载图片的边框进来,并不会加载图片中的像素点  
  14.         BitmapFactory.decodeFile(filePath, options);  
  15.         //获得原图的宽和高  
  16.         int outWidth = options.outWidth;  
  17.         int outHeight = options.outHeight;  
  18.         //定义缩放比例  
  19.         int sampleSize = 1;  
  20.         while (outHeight / sampleSize > destHeight || outWidth / sampleSize > destWidth) {  
  21.             //如果宽高的任意一方的缩放比例没有达到要求,都继续增大缩放比例  
  22.             //sampleSize应该为2的n次幂,如果给sampleSize设置的数字不是2的n次幂,那么系统会就近取值  
  23.             sampleSize *= 2;  
  24.         }  
  25.         /********************************************************************************************/  
  26.         //至此,第一次采样已经结束,我们已经成功的计算出了sampleSize的大小  
  27.         /********************************************************************************************/  
  28.         //二次采样开始  
  29.         //二次采样时我需要将图片加载出来显示,不能只加载图片的框架,因此inJustDecodeBounds属性要设置为false  
  30.         options.inJustDecodeBounds = false;  
  31.         //设置缩放比例  
  32.         options.inSampleSize = sampleSize;  
  33.         options.inPreferredConfig = Bitmap.Config.ARGB_8888;  
  34.         //加载图片并返回  
  35.         return BitmapFactory.decodeFile(filePath, options);  
  36.     }  
  37. }