Canvas绘制线条时断断续续的

解决线条断断续续的关键代码如下:

我们可以使用quadraticCurveTo来实现贝塞尔曲线使其变成光滑的曲线

注意: ctx.value.lineCap = "round";
            ctx.value.lineJoin = "round";     这两个属性是必须设置的

           

lastX,lastY:贝塞尔曲线的起始点;

controlPoint:贝塞尔曲线的控制点;

endPoint:贝塞尔曲线的结束点;

// 绘制贝塞尔曲线让线段看起来更加平滑
const drawLine = (controlPoint: { x: number; y: number }, endPoint: { x: number; y: number }) => {
	if (!isDrawing || !ctx.value || !canvas.value) return;
	ctx.value.beginPath();
	if (mode == "draw") {
		// 如果是绘制
		ctx.value.globalCompositeOperation = "source-over";
		ctx.value.lineWidth = 10;
	} else {
		// 如果是橡皮擦
		ctx.value.globalCompositeOperation = "destination-out";
		ctx.value.lineWidth = clearRadius * 2;
	}
	ctx.value.moveTo(lastX, lastY);
	ctx.value.strokeStyle = props.color ?? "#ffffff";
	ctx.value.lineCap = "round";
	ctx.value.lineJoin = "round";
	ctx.value.quadraticCurveTo(controlPoint.x, controlPoint.y, endPoint.x, endPoint.y);
	ctx.value.stroke();
	ctx.value.closePath();
};

        在这段代码中我们设置了ctx.value.globalCompositeOperation = "destination-out";来使我们实现橡皮擦的效果,这个属性的意思是在源图像(您打算放置到画布上的绘图)外显示目标图像(您已经放置在画布上的绘图),只有源图像(您打算放置到画布上的绘图)外的目标图像(您已经放置在画布上的绘图)部分会被显示,源图像(您打算放置到画布上的绘图)是透明的。

 globalCompositeOperation的定义和用法

globalCompositeOperation 属性设置或返回如何将一个源(新的)图像绘制到目标(已有)的图像上。其中:

  • 源图像 = 您打算放置到画布上的绘图。
  • 目标图像 = 您已经放置在画布上的绘图

下图显示了globalCompositeOperation的不同的值的解释:

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值