<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位 ,只是用于只有透明度的图片
这四种色彩设置占位越多则色彩效果越好,是偏向内存还是色彩效果就看自己的取舍了。