一定要先转换成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 }