一定要先转换成PNG格式的否则会不透明
1 /**
2 * 方形转换图片成圆形
3 *
4 * @param bitmap
5 * 传入Bitmap对象
6 * @return
7 */
8 public Bitmap toRoundBitmap(Bitmap bitmap) {
9 int width = bitmap.getWidth();
10 int height = bitmap.getHeight();
11 float roundPx;
12 float left, top, right, bottom, dst_left, dst_top, dst_right, dst_bottom;
13 if (width <= height) {
14 roundPx = width / 2;
15 left = 0;
16 top = 0;
17 right = width;
18 bottom = width;
19 height = width;
20 dst_left = 0;
21 dst_top = 0;
22 dst_right = width;
23 dst_bottom = width;
24 } else {
25 roundPx = height / 2;
26 float clip = (width - height) / 2;
27 left = clip;
28 right = width - clip;
29 top = 0;
30 bottom = height;
31 width = height;
32 dst_left = 0;
33 dst_top = 0;
34 dst_right = height;
35 dst_bottom = height;
36 }
37
38 Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888);
39 Canvas canvas = new Canvas(output);
40
41 final int color = 0xff424242;
42 final Paint paint = new Paint();
43 final Rect src = new Rect((int) left, (int) top, (int) right,
44 (int) bottom);
45 final Rect dst = new Rect((int) dst_left, (int) dst_top,
46 (int) dst_right, (int) dst_bottom);
47 final RectF rectF = new RectF(dst);
48
49 paint.setAntiAlias(true);// 设置画笔无锯齿
50
51 canvas.drawARGB(0, 0, 0, 0); // 填充整个Canvas
52 paint.setColor(color);
53
54 // 以下有两种方法画圆,drawRounRect和drawCircle
55 // canvas.drawRoundRect(rectF, roundPx, roundPx, paint);//
56 // 画圆角矩形,第一个参数为图形显示区域,第二个参数和第三个参数分别是水平圆角半径和垂直圆角半径。
57 canvas.drawCircle(roundPx, roundPx, roundPx, paint);
58
59 paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));// 设置两张图片相交时的模式,参考http://trylovecatch.iteye.com/blog/1189452
60 canvas.drawBitmap(bitmap, src, dst, paint); // 以Mode.SRC_IN模式合并bitmap和已经draw了的Circle
61
62 return output;
63 }
1 // 矩形将图片的四角圆化
2 public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
3 Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
4 bitmap.getHeight(), Config.ARGB_8888);
5 // 得到画布
6 Canvas canvas = new Canvas(output);
7 // 将画布的四角圆化
8 final int color = Color.RED;
9 final Paint paint = new Paint();
10 // 得到与图像相同大小的区域 由构造的四个值决定区域的位置以及大小
11 final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
12 final RectF rectF = new RectF(rect);
13 // 值越大角度越明显
14 final float roundPx = 30;
15 paint.setAntiAlias(true);
16 canvas.drawARGB(0, 0, 0, 0);
17 paint.setColor(color);
18 // drawRoundRect的第2,3个参数一样则画的是正圆的一角,如果数值不同则是椭圆的一角
19 canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
20 paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
21 canvas.drawBitmap(bitmap, rect, rect, paint);
22 return output;
23 }