Canvas:绘制路径

摘要:
然后使用“绘制”命令绘制路径。然后关闭路径。函数解释beginPath():清除子路径列表并创建新路径。constcanvas=文档。按ID获取元素;constctx=画布。getContext;//第一路径x。beginPath();ctx。strokeStyle='蓝色';ctx。移动到;ctx。lineTo;ctx。stroke();//第二路径x。beginPath();ctx。strokeStyle=“绿色”;ctx。移动到;ctx。lineTo;ctx。stroke();注意:如果我们删除ctx。在SecondPath部分中的beginPath();然后最后一行中的笔划将重新绘制所有两条路径,即第一条路径绘制两次,第二次的效果覆盖第一次。
Canvas:绘制路径

绘制路径

  图形的基本元素是路径。路径是[通过不同颜色和宽度的线段或曲线相连形成的不同形状的]点的集合。一个路径,甚至一个子路径,都是闭合的。

  使用路径绘制图形需要一些额外的步骤。

  1. 首先,你需要创建路径起始点。
  2. 然后你使用画图命令去绘制路径。
  3. 之后把路径进行封闭。
  4. 一旦路径生成,你就能通过描边或填充路径区域来渲染图形。

函数解释

beginPath()

【说明】:清空子路径列表,并新建一条路径。

【例子】:绘制两条颜色不同的直线。

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');

// First path
ctx.beginPath();
ctx.strokeStyle = 'blue';
ctx.moveTo(20, 20);
ctx.lineTo(200, 20);
ctx.stroke();

// Second path
ctx.beginPath();
ctx.strokeStyle = 'green';
ctx.moveTo(20, 20);
ctx.lineTo(120, 120);
ctx.stroke();

说明:如果我们在Second Path部分删掉 ctx.beginPath(); 那么最后一行的stroke将会重新绘制所有的两条路径,也就是说第一条路径被绘制了两次,且第二次的效果覆盖了第一次。

moveTo()/lineTo()

【说明】

  moveTo:将一个新的子路径的起始点移动到(x,y)坐标的方法。

  lineTo:使用直线连接子路径的终点到x,y坐标的方法(并不会真正地绘制)。

说明:这两个方法都不会真正绘制图形,相当于隐形墨水,来描述路径,我们知道stroke和fill方法才会真正描边或者填充图形。

closePath()

【说明】:尝试从当前点添加直线到子路径的开始点,来闭合路径。

【实例】:绘制一个三角形

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');

ctx.beginPath();
ctx.moveTo(20, 150);   // Move pen to bottom-left corner
ctx.lineTo(120, 20);   // Line to top corner
ctx.lineTo(220, 150);  // Line to bottom-right corner
ctx.closePath();       // Line to bottom-left corner
ctx.stroke();

说明:我们只使用lineTo画了两条子路径,但是效果是一个三角形,这是因为最后的closePath(),绘制了一条指向开始点的直线。

实例:绘制一个网格

代码

    <canvas id="canvas"></canvas>
    <script type="text/javascript">
        var canvas = document.getElementById("canvas");
        var context = canvas.getContext('2d');

        function drawGrid(context,color,stepx,stepy) {
            context.strokeStyle = color;
            context.lineWidth = 0.5;
            for(var i = stepx+0.5;i<context.canvas.width;i+=stepx)
            {
                context.beginPath();
                context.moveTo(i,0);
                context.lineTo(i,context.canvas.height);
                context.stroke();
            }
            for(var i = stepy+0.5;i<context.canvas.height;i+=stepy)
            {
                context.beginPath();
                context.moveTo(0,i);
                context.lineTo(context.canvas.width,i);
                context.stroke();
            }
        }

        drawGrid(context,"lightgray",10,10);
    </script>  

效果

 Canvas:绘制路径第1张

免责声明:文章转载自《Canvas:绘制路径》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇从 Android 到 AI 之路[Swift]在Swift项目中创建桥接头文件,Swift文件和Objective-C文件相互调用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql设计表结构数据类型的选择

选择合适的数据类型 在使用MySQL创建数据表的时候会遇到一个问题,如何为字段选择合适的数据类型.比如创建一个员工信息表,每个字段都可以用很多种类型来定义, int,char,float等等. char和varchar char和varchar都是用来存储字符串类型的数据,但是他们保存和检索的方式不一样.char属于固定长度的字符类型,二varchar属于...

修改Springboot启动端口号

前言Springboot启动的时候,端口的设定默认是8080,这肯定是不行的,我们需要自己定义端口,Springboot提供了两种方式,第一种,我们可以通过application.yml配置文件配置,第二种,可以通过代码里面指定,在开发中,建议使用修改application.yml的方式来修改端口。 一、pom.xml<?xml version="1...

Activity的生命周期详讲及其的生命周期监视,应用程序启动过程,

1:应用程序的启动过程 应用程序的图标被点击-》启动activitythread-》线程的入口main函数-》创建activitythread-》绑定activitythread thread.attach(false,startSeq)-》创建仪表类生命周期,管理程序的生命进程mInstrumentation = new Instrumentation(...

tkinter学习(4)frame、pack、canvas学习

1.frame和pack学习 1.1 代码: importtkinter as tk window =tk.Tk() window.title('my window') window.geometry('600x400+500+0') #tk.Label(window, text='on the window').pack() #这种写法很简洁#与下...

前端工程中使用require.context实现前端工程自动化,批量导入路由表、批量导入svg图等场景,

require.context是什么 一个webpack的api,通过执行require.context函数获取一个特定的上下文,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多模块的情况,可以使用这个api,它会遍历文件夹中的指定文件,然后自动导入,使得不需要每次显式的调用import导入模块 什么时候需要用到require.c...

【原】iOS学习之Quartz2D(1)

什么是Quartz2D  1、Quartz 2D 是一个二维绘图引擎,同时支持iOS和Mac系统  2、Quartz 2D 能完成的工作: 绘制图形 : 线条三角形矩形圆弧等 绘制文字 绘制生成图片(图像) 读取生成PDF 截图裁剪图片 自定义UI控件 图形上下文  1、图形上下文(Graphics Context):是一个 CGContextRef...