在开发中图片缩放是经常要用的了,近日需要实现一个漫画书项目,在最后阅读漫画界面出现了图片不是被横向拉伸的过大就是被纵向拉伸的过长,刚开始寄希望于ImageView的ScaleType和Imageloader的自定义拉伸配置,结果虽然基本能等比例缩放,但是却出现了另外一个很恼火的Bug—–图片加载卡顿和裁剪不合适,最后在网上寻找到相关等比例拉伸代码,修改后,完美解决,代码如下:
public static Bitmap scaleImage( Context content,Bitmap bm){
//获得屏幕的宽高
WindowManager wm1 =( (Activity)content).getWindowManager();
int screenWidth = wm1.getDefaultDisplay().getWidth()-10;
//int screenHeigh = wm1.getDefaultDisplay().getHeight();
// 获得图片的宽高
int width = bm.getWidth();
int height = bm.getHeight();
// 计算缩放比例
float scaleWidth = ((float) screenWidth) / width;
float scaleHeight=scaleWidth;
// float scaleHeight = ((float) screenHeigh) / height;
// 取得想要缩放的matrix参数
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
// 得到新的图片
Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);
return newbm;
}
上面代码根据需求修改过,可以看到这里首先获得了屏幕的宽高,然后计算缩放比例,最后调用matrix.postScale()方法得到宽高缩放的矩阵,然后通过重绘bitmap实现宽高等比例缩放。
当然通过上面的代码也可以其他比例的缩放,这里就不啰嗦了