Bitmap压缩(二次采样)

来源:互联网 发布:分水岭算法 过分割 编辑:程序博客网 时间:2024/06/16 11:31

<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
原创粉丝点击