前面用Matrix来缩放Bitmap,发现有些情况下会抛出错误,导致图片空白。
/**
* 缩放
*
* @param bm
* @param newWidth
* @param newHeight
* @return
*/
// public synchronized static Bitmap scaleImage(boolean isApplyRadio,Bitmap bm, int newWidth, int newHeight) {
//
// //应用图标缩放
// if(isApplyRadio&&iconScaleRadio!=1f){
// newWidth= (int) (newWidth*iconScaleRadio);
// newHeight= (int) (newHeight*iconScaleRadio);
// }
//
// if (bm == null) {
// return null;
// }
// int width = bm.getWidth();
// int height = bm.getHeight();
// float scaleWidth = ((float) newWidth) / width;
// float scaleHeight = ((float) newHeight) / height;
// Matrix matrix = new Matrix();
// matrix.postScale(scaleWidth, scaleHeight);
// Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);
// if (bm != null & !bm.isRecycled()) {
// bm.recycle();
// bm = null;
// }
// return newbm;
// }
下面采用Cavans来缩放图片,就不会有问题了。
private static PaintFlagsDrawFilter pfd = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
public synchronized static Bitmap scaleImageCavans(boolean isApplyRadio,Bitmap bm, int newWidth, int newHeight) {
//应用图标缩放
if(isApplyRadio&&iconScaleRadio!=1f){
newWidth= (int) (newWidth*iconScaleRadio);
newHeight= (int) (newHeight*iconScaleRadio);
}
if (bm == null) {
return null;
}
int width = bm.getWidth();
int height = bm.getHeight();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
Bitmap newbm = Bitmap.createBitmap(newWidth, newWidth,
Bitmap.Config.ARGB_8888);
mCanvas.setBitmap(newbm);
mPaint.setXfermode(null);
mPaint.setAntiAlias(true);
mCanvas.save();
mCanvas.scale(scaleWidth, scaleHeight);
//保证图标不失真
mCanvas.setDrawFilter(pfd);
mCanvas.drawBitmap(bm,0,0,null);
mCanvas.restore();
if (bm != null & !bm.isRecycled()) {
bm.recycle();
bm = null;
}
return newbm;
}