首页 > 其他分享 >Canvas绘制线条时断断续续的

Canvas绘制线条时断断续续的

时间:2024-09-07 17:52:15浏览次数:15  
标签:画布 Canvas ctx globalCompositeOperation value 断断续续 绘图 图像 绘制

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

我们可以使用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的不同的值的解释:

标签:画布,Canvas,ctx,globalCompositeOperation,value,断断续续,绘图,图像,绘制
From: https://blog.csdn.net/qq_59625204/article/details/141859736

相关文章

  • AWTK 如何用 OpenGL 绘制图形
    在有GPU的情况下,AWTK使用OpenGL绘制图形。但是你会发现,如果自己在paint事件中使用OpenGL绘制图形,图形是无法显示的。原因是,AWTK采用nanovg绘制图形,而nanovg并不是在绘制时立即执行的,而是在整个界面绘制完成(EndFrame中)集中提交给GPU执行的。所以,如果在paint事......
  • 【Canvas与艺术】四叶花
    【成图】【代码】<!DOCTYPEhtml><htmllang="utf-8"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><head><title>386.四叶花</title><styletype="text/css"&......
  • Canvas艺术之旅:了解几个绘制基本图形的 API
    了解几个绘制基本图形的APICanvas是HTML5提供的绘画API,可以用于在Web页面上绘制各种基本图形。本文介绍一些Canvas绘制基本图形的API:前置条件注意:本文章所提供的代码示例默认已经进行了canvas元素定义,DOM获取以及canvas的上下文获取,以下进行代码演示时将......
  • 传统CV算法——基于Opencv的图像绘制
    直线绘制参数解析:(图像矩阵,直线起始坐标,直线终止坐标、颜色、线条厚度)cv2.line()是OpenCV中用于绘制直线的函数。参数说明:img:要绘制直线的图像矩阵。(100,30):直线的起点坐标。(210,180):直线的终点坐标。color:直线的颜色,三个值分别表示蓝色、绿色和红色通道的强度。这里(......
  • 根据点坐标X,Y,Z和方向向量Vx,Vy,Vz绘制射线簇
    根据点坐标X,Y,Z和方向向量Vx,Vy,Vz绘制射线簇1.数据导入paraview可以直接导入以逗号分隔的txt或csv数据,但无法自动识别,需要使用过滤器转为paraview可以操作的数组。以下是以空格分隔的txt数据为例,paraview5.11.1版本。数据的存储格式如下图所示,以空格隔开。x,y,z为点的空间坐标,vx,v......
  • 【Canvas与数学】圆在直线上滚动形成的三种摆线轨迹
    【说明】一个圆盘在地面上匀速滚动,圆盘上一点所形成的轨迹称为摆线。摆线对于机械有着非常重要的意义,从它的实用价值来说,摆线是可以和椭圆、抛物线和弹道线相提并论的。【摆线图像】控制点在圆周上形成的标准摆线:控制点在圆外形成的自交化变形摆线:控制点在圆内形成的平缓化变形摆线......
  • 【Canvas与钟表】彩虹表盘
    【成图】【代码】<!DOCTYPEhtml><htmllang="utf-8"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><head><title>381.彩虹表盘</title><styletype="text/css"......
  • 【Canvas与表盘】铜圈紫底表盘
    【成图】 【代码】<!DOCTYPEhtml><htmllang="utf-8"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><head><title>377.铜圈紫底表盘</title><styletype="text/css&qu......
  • canvas版本的俄罗斯方块,少一个全行填充消除,有兴趣再加,俄罗斯方块还是复杂一些
    代码:<!Doctypehtml><htmllang="zh_cn"><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>俄罗斯方块</title><metaname="Ke......
  • WebGL_0020:threejs 加载glb模型,加载图片贴图,加载canvas贴图,创建精灵模型并贴图
    1,import*asTHREEfrom'three';importtype{MapViewer}from'@/utils/map3d/mapViewer';import{STATIC_URL}from'@/config';import{GLTFLoader}from'three/examples/jsm/loaders/GLTFLoader';constgetSpri......