/**
* 转换图片成椭圆
*
* @param bitmap
* @return
*/
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
final float roundPx = bitmap.getWidth() / 2;
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
/**
* 转换图片成圆形 半径为矩形的宽
*
* @param bitmap
* 传入Bitmap对象
* @return
*/
public Bitmap toRoundBitmap(Bitmap bitmap) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
float roundPx;
float left, top, right, bottom, dst_left, dst_top, dst_right, dst_bottom;
if (width <= height) {
roundPx = width / 2;
top = 0;
bottom = width;
left = 0;
right = width;
height = width;
dst_left = 0;
dst_top = 0;
dst_right = width;
dst_bottom = width;
} else {
roundPx = height / 2;
float clip = (width - height) / 2;
left = clip;
right = width - clip;
top = 0;
bottom = height;
width = height;
dst_left = 0;
dst_top = 0;
dst_right = height;
dst_bottom = height;
}
Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect src = new Rect((int) left, (int) top, (int) right,
(int) bottom);
final Rect dst = new Rect((int) dst_left, (int) dst_top,
(int) dst_right, (int) dst_bottom);
final RectF rectF = new RectF(dst);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, src, dst, paint);
return output;
}
/**
* 返回一个 带描边的圆形图
*
* @param bitmap
* 源图,最好为方形图;
* @param diameter
* 直径
* @param mBorderWidth
* 描边宽度
* @return
*/
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int diameter,
int boundsWith) {
Bitmap output = Bitmap.createBitmap(diameter, diameter,
Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff000000;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, diameter, diameter);
final RectF rectF = new RectF(rect);
final float roundPx = 360;
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setColor(color);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
Bitmap newBitmap = null;
int sX = bitmap.getWidth();
int sY = bitmap.getHeight();
float scaleWidthRate = diameter / (float) sX;
float scaleHeightRate = diameter / (float) sY;
float scaleRate = Math.max(scaleWidthRate, scaleHeightRate);
Matrix matrix = new Matrix();
matrix.setScale(scaleRate, scaleRate);
newBitmap = Bitmap.createBitmap(bitmap, 0, 0, sX, sY, matrix, true);
canvas.drawBitmap(newBitmap, null, rect, paint);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(0xffe8e8e8);
paint.setStrokeWidth(boundsWith);
// 画弧
canvas.drawCircle(rectF.centerX(), rectF.centerY(),
(rectF.height() - boundsWith) / 2 + 1, paint);
return output;
}
bitmap画圆
最新推荐文章于 2023-02-20 23:44:43 发布