canvas基础:绘制线段,绘制多边形

news2024/12/25 13:59:50

canvas实例应用100+ 专栏提供canvas的基础知识,高级动画,相关应用扩展等信息。
canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重要的帮助。

文章目录

    • 使用路径绘制图形需要一些额外的步骤:
    • 用到的方法:
    • 示例效果图
    • 示例源代码(共97行)
    • canvas基本属性
    • canvas基础方法

如何通过canvas通绘制线段,绘制多边形呢? 图形的基本元素是路径。路径是通过不同颜色和宽度的线段或曲线相连形成的不同形状的点的集合。一个路径,甚至一个子路径,都是闭合的。

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

创建路径起始点
调用绘制方法去绘制出路径
把路径封闭
一旦路径生成,通过描边或填充路径区域来渲染图形。

用到的方法:

beginPath()
新建一条路径,路径一旦创建成功,图形绘制命令被指向到路径上生成路径
moveTo(x, y)
把画笔移动到指定的坐标(x, y)。相当于设置路径的起始点坐标。
lineTo(x, y)
画线到指定的坐标(x, y)。相当于一段的终点。
closePath()
闭合路径之后,图形绘制命令又重新指向到上下文中
stroke()
通过线条来绘制图形轮廓
fill()
通过填充路径的内容区域生成实心的图形

示例效果图

在这里插入图片描述

示例源代码(共97行)


/*
* @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN)
* @此源代码版权归大剑师兰特所有,可供学习或商业项目中借鉴,未经授权,不得重复地发表到博客、论坛,问答,git等公共空间或网站中。
* @Email: 2909222303@qq.com
* @weixin: gis-dajianshi
* @First published in CSDN
* @First published time: 2023-11-27
*/
<template>
	<div class="container">
		<div class="top">
			<h3>canvas绘制线段,绘制多边形</h3>
			<div>大剑师兰特, 还是大剑师兰特,gis-dajianshi</div>
			<h4>
				<el-button type="primary" size="mini" @click="drawLine()">绘制直线</el-button>
				<el-button type="primary" size="mini" @click="drawPolygon1()">绘制多边形(直连)</el-button>
				<el-button type="primary" size="mini" @click="drawPolygon2()">绘制多边形(关闭路径)</el-button>
			</h4>
		</div>
		<div class="dajianshi ">
			<canvas id="dajianshi" width="800" height="400"></canvas>
		</div>

	</div>
</template>
<script>
	export default {
		data() {
			return {
				ctx: null,
			}
		},
		mounted() {
			this.setCanvas()
		},
		methods: {
			setCanvas() {
				var canvas = document.getElementById('dajianshi');
				if (!canvas.getContext) return;
				this.ctx = canvas.getContext("2d");
			},
			drawLine() {
                    this.ctx.beginPath();
                    this.ctx.moveTo(50, 50);
                    this.ctx.lineTo(600, 50);
                    this.ctx.lineTo(600, 200);
					this.ctx.stroke(); //绘制路径。
					this.ctx.closePath();
			},
			drawPolygon1() {
				this.ctx.beginPath();
				this.ctx.moveTo(50, 50);
				this.ctx.lineTo(100, 300);
				this.ctx.lineTo(50, 300);
				this.ctx.lineTo(50, 50);
                this.ctx.fillStyle= 'rgba(250,0,0,0.4)';
				this.ctx.fill(); //绘制路径。
			},
			drawPolygon2() {
                    this.ctx.beginPath();
                    this.ctx.moveTo(100, 100);
                    this.ctx.lineTo(700, 50);
                    this.ctx.lineTo(700, 200);
					this.ctx.closePath();
					this.ctx.strokeStyle= 'rgba(250,0,0,0.8)';
					this.ctx.stroke(); 
					
			},

		}
	}
</script>

<style scoped>
	.container {
		width: 1000px;
		height: 600px;
		margin: 50px auto;
		border: 1px solid green;
		position: relative;
	}

	.top {
		margin: 0 auto 0px;
		padding: 10px 0;
		background: indianred;
		color: #fff;
	}

	.dajianshi {
		margin: 10px auto 0;
		border: 1px solid #ccc;
		width: 800px;
		height: 400px;
		background-color: #f9f9f9;
	}
</style>




canvas基本属性

属性属性属性
canvasfillStylefilter
fontglobalAlphaglobalCompositeOperation
heightlineCaplineDashOffset
lineJoinlineWidthmiterLimit
shadowBlurshadowColorshadowOffsetX
shadowOffsetYstrokeStyletextAlign
textBaselinewidth

canvas基础方法

方法方法方法
arc()arcTo()addColorStop()
beginPath()bezierCurveTo()clearRect()
clip()close()closePath()
createImageData()createLinearGradient()createPattern()
createRadialGradient()drawFocusIfNeeded()drawImage()
ellipse()fill()fillRect()
fillText()getImageData()getLineDash()
isPointInPath()isPointInStroke()lineTo()
measureText()moveTo()putImageData()
quadraticCurveTo()rect()restore()
rotate()save()scale()
setLineDash()setTransform()stroke()
strokeRect()strokeText()transform()
translate()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1258894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TDA4开发环境Docker化

文章目录 背景1. TDA4X Linux SDK编译环境镜像构建1.1 安装SDK1.2 验证制卡1.2.1 出现的问题:1.3 验证编译1.3.1 出现的问题2. TDA4X Linux-RT SDK编译环境镜像构建2.1 安装SDK2.2 出现的问题参考背景 开始阅读本篇前,假设你已经对docker有了一定了解,且有过docker换件搭建…

优思学院|5S不只是清洁,但却离不开清洁!

很多说5S不止是清洁和搞卫生那么简单&#xff0c;相信有正规地学习过5S的人都应该深切了解。 不过&#xff0c;5S之中的确包括了清理、清洁的步骤&#xff0c;5S&#xff0c;也被称为“五常法则”或“五常法”&#xff0c;它包含了&#xff1a; 整理&#xff08;SEIRI&#x…

8.统一异常处理 + 统一记录日志

目录 1.统一异常处理 2.统一记录日志 1.统一异常处理 在 HomeController 类中添加请求方法&#xff08;服务器发生异常之后需要统一处理异常&#xff0c;记录日志&#xff0c;然后转到 500 页面&#xff0c;需要人工处理重定向到 500 页面&#xff0c;提前把 500 页面请求访问…

Containerd Container管理功能解析

Containerd Container管理功能解析 container是containerd的一个核心功能&#xff0c;用于创建和管理容器的基本信息。 本篇containerd版本为v1.7.9。 更多文章访问 https://www.cyisme.top 本文从ctr c create命令出发&#xff0c;分析containerd的容器及镜像管理相关功能。 …

01 项目架构

关于我 曾经就职于蚂蚁金服&#xff0c;多年的后端开发经验&#xff0c;对微服务、架构这块研究颇深&#xff0c;同时也是一名热衷于技术分享、拥抱开源技术的博主。 个人技术公众号&#xff1a;码猿技术专栏个人博客&#xff1a;www.java-family.cn 前期一直在更新《Spring…

什么是美颜sdk?视频直播美颜sdk技术深度剖析

美颜sdk可以通过实时处理图像&#xff0c;提升主播或用户在视频直播中的外观。通过美颜sdk接口调用可以轻松实现美颜效果。美颜sdk的核心目标是在保持图像真实性的同时&#xff0c;为用户创造出最理想的美化效果。 一、美颜sdk的技术实现 1.面部识别技术&#xff1a;美颜sdk…

虚拟直播在文旅行业火爆发展!背后的“生意经”你抓住了吗?

&#xfeff;自疫情结束以来&#xff0c;文化和旅游行业恢复势头强劲&#xff0c;各大旅游景点消费活跃度持续攀升。在这种情况下&#xff0c;“直播文旅”模式的深度融合对文旅行业的客流导入起到了极大的带动作用。 不过&#xff0c;当前的文旅直播也出现了一些问题&#xf…

流媒体播放器EasyPlayer播放H.265与H.264时进度条样式异常该如何解决?

H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;可支持H.264与H.265编码格式&#xff0c;性能稳定、播放流畅&#xff0c;能支持WebSocket-FLV、HTTP-FLV&#xff0c;HLS&#xff08;m3u8&#…

北京 | 竹云与南方电网携手荣获“IDC 2023未来企业奖未来连接领导者”

11月22日-23日&#xff0c;2023第八届IDC中国数字化转型年度盛典在北京召开。本次大会以“竞放数字力量”为主题&#xff0c;汇聚超过1000位来自不同行业的大咖与伙伴共同参与此次盛会&#xff0c;从全球化视角出发&#xff0c;围绕本土化落地人工智能&#xff08;大模型&#…

pytest系列——pytest_collection_modifyitems钩子函数修改测试用例执行顺序

前言 pytest默认执行用例是根据项目下的文件名称按ascii码去收集运行的&#xff1b;文件中的用例是从上往下按顺序执行的。 pytest_collection_modifyitems 这个函数顾名思义就是收集测试用例、改变用例的执行顺序的。 【严格意义上来说&#xff0c;我们在用例设计原则上用例…

NFTScan | 11.20~11.26 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2023.11.20~ 2023.11.26 NFT Hot News 01/ OKX Ordinals 市场 API 完成升级 11 月 21 日&#xff0c;OKX Ordinals 市场 API 现已完成升级&#xff0c;新增支持按币种单价查询、排序&…

TDA4VM EVM开发板调试笔记

文章目录 1. 前言2. 官网资料导读3. 安装 Linux SDK4. 制作SD 启动卡5. 验证启动1. 前言 TDA4作为一般经典的车规级SOC芯片,基于它的低阶智驾方案目前成为各家智驾方案公司的量产首选,这也使得基于TDA4的开发需求陡增,开发和使用TDA4既要熟悉Linux驱应用开发,还要熟悉传统…

uniapp基础-教程之HBuilderX配置篇-01

uniapp教程之HBuilderX配置篇-01 为什么要做这个教程的梳理&#xff0c;主要用于自己学习和总结&#xff0c;利于增加自己的积累和记忆。首先下载HBuilderX&#xff0c;并保证你的软件在C盘进行运行&#xff0c;最好使用英文或者拼音&#xff0c;这个操作是为了保证软件的稳定…

瑞芯微RK3588核心板在网络录像机产品中的应用与优势-迅为电子

你是否曾经想过&#xff0c;网络录像机是如何工作的&#xff1f;为什么它可以在没有电脑的情况下进行录像和监控&#xff1f;答案是&#xff0c;它依赖于RK3588核心板。那么&#xff0c;RK3588核心板到底在网络录像机产品中扮演着什么样的角色呢&#xff1f;它又具有哪些优势呢…

力扣:239. 滑动窗口最大值

题目&#xff1a; 给定一个数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 提示&#xff1a; 1 < nums.length < 10^5-10^4 < n…

使用UI Automation库用于UI自动化测试

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

NX二次开发UF_CURVE_ask_spline_data 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_spline_data Defined in: uf_curve.h int UF_CURVE_ask_spline_data(tag_t spline_tag, UF_CURVE_spline_p_t spline_data ) overview 概述 Reads the spline data a…

FreeRTOS-任务管理

目录 任务管理 创建任务 创建任务示例1&#xff1a;创建两个同等级的任务 创建任务示例2&#xff1a;使用任务参数 删除任务 删除任务示例&#xff1a;删除任务 挂起任务 任务优先级 优先级实验&#xff1a;修改优先级 Tick 延时函数 延时示例 空闲任务 钩子函数…

创意二维码案例:意大利艺术家的最新二维码艺术展!

意大利艺术家——米开朗基罗皮斯特莱托&#xff08;Michelangelo Pistoletto&#xff09;的个人艺术展“二维码‘说’”&#xff08;QR CODE POSSESSION&#xff09;正在北京798艺术区的常青艺术画廊展出&#xff0c;这是一次别出心裁的创意艺术展&#xff01; 主要体现在3个方…

案例036:基于微信小程序的在线课堂系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…