android canvas 拉伸图片大小,Android Bitmap图片缩放优化,用canvas替代Matrix进行缩放,解决一些错我...

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值