import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Shader;
/**
* author cowards
* created on 2018\11\23 0023
**/
public class BitmapUtil {
/**
* 利用BitmapShader绘制圆角图片
*
* @param bitmap 待处理图片
* @param outWidth 结果图片宽度,一般为控件的宽度
* @param outHeight 结果图片高度,一般为控件的高度
* @param radius 圆角半径大小
* @return 结果图片
*/
public static Bitmap roundBitmapByShader(Bitmap bitmap, int outWidth, int outHeight, int radius) {
if (bitmap == null) {
throw new NullPointerException("Bitmap can't be null");
}
// 初始化缩放比
float widthScale = outWidth * 1.0f / bitmap.getWidth();
float heightScale = outHeight * 1.0f / bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.setScale(widthScale, heightScale);
// 初始化绘制纹理图
BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
// 根据控件大小对纹理图进行拉伸缩放处理
bitmapShader.setLocalMatrix(matrix);
// 初始化目标bitmap
Bitmap targetBitmap = Bitmap.createBitmap(outWidth, outHeight, Bitmap.Config.ARGB_8888);
// 初始化目标画布
Canvas targetCanvas = new Canvas(targetBitmap);
// 初始化画笔
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setShader(bitmapShader);
// 利用画笔将纹理图绘制到画布上面
targetCanvas.drawRoundRect(new RectF(0, 0, outWidth, outWidth), radius, radius, paint);
return targetBitmap;
}
}