前面用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;

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐