bitmap画圆

/**
	 * 转换图片成椭圆
	 * 
	 * @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;
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值