当前位置: 首页 > java >正文

Canvas基础篇:绘制矩形

Canvas基础篇:绘制矩形

  • 图形绘制模式
    • 矩形rect
    • 边框矩形strokeRect
      • 边框矩形效果预览
      • 边框矩形代码实现
    • 填充矩形fillRect
      • 填充矩形效果预览
      • 填充矩形代码实现
    • 清除矩形clearRect
  • 综合实例1
    • 效果预览
    • 实现代码
  • 综合实例2
    • 效果预览
    • 代码实现
  • 结语

图形绘制模式

在之前的文章 Canvas基础篇:概述 中,介绍到Canvas支持两种形式的图形绘制:矩形和路径;还支持三种绘制模式:填充模式fill、边框模式stroke(也称:描边模式)、清除模式clear。本文将介绍矩形绘制,以及矩形在三种绘制模式中的使用。

矩形rect

在Canvas中,可以使用 rect() 方法直接绘制一个矩形,其语法如下所示:

rect(x, y, width, height)

其中,xy分别代表矩形绘制时,左上方顶点的/坐标位置,width 代表矩阵宽度height 代表矩阵高度
但是在使用 rect() 方法时,有一个注意点:该方法不会立刻把矩形绘制出来,必须在该方法后调用 stroke() 方法或者 fill() 方法,才会把矩形绘制出来,其效果与 strokeRect()fillRect() 一致,故此处不做展示。

边框矩形strokeRect

strokeRect() 通过边框描边的方式绘制一个矩形,其语法与rect() 方法一致:

strokeRect(x, y, width, height)

边框矩形效果预览

边框矩形

边框矩形代码实现

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>边框矩形</title></head><body><canvas id="canvas" width="600" height="600"></canvas><script>function load() {// 获取画布元素let canvas = document.getElementById('canvas')// 获取上下文对象let ctx = canvas.getContext("2d");// 绘制边框矩形ctx.strokeRect(10, 10, 100, 100);}load()</script></body>
</html>

填充矩形fillRect

fillRect() 通过填充的方式绘制一个实心矩形,其语法与rect() 方法一致:

fillRect(x, y, width, height)

填充矩形效果预览

填充矩形

填充矩形代码实现

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>填充矩形</title></head><body><canvas id="canvas" width="600" height="600"></canvas><script>function load() {// 获取画布元素let canvas = document.getElementById('canvas')// 获取上下文对象let ctx = canvas.getContext("2d");// 绘制填充矩形ctx.fillRect(10, 10, 100, 100);}load()</script></body>
</html>

清除矩形clearRect

clearRect() 方法用于清除指定矩形区域,简单来说就是:在指定位置创建一个透明的矩形,覆盖原有的图形,看起来这部分图形好像被”清除“了,其语法与rect() 方法一致:

clearRect(x, y, width, height)

清除矩形的效果不好展示,下面我将通过一个综合实例,来更清楚地展示描边矩形、填充矩形和清除矩形的效果与区别。

综合实例1

效果预览

示例1

实现代码

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>矩形实例1</title></head><body><canvas id="canvas" width="600" height="600"></canvas><script>function load() {// 获取画布元素let canvas = document.getElementById('canvas')// 获取上下文对象let ctx = canvas.getContext("2d");// 绘制矩形ctx.strokeRect(10, 10, 500, 500)ctx.fillRect(25, 25, 470, 470)ctx.clearRect(40, 40, 440, 440)ctx.fillRect(55, 55, 410, 410)ctx.clearRect(70, 70, 380, 380)ctx.fillRect(85, 85, 350, 350)ctx.clearRect(100, 100, 320, 320)}load()</script></body>
</html>

上述代码中,矩形的位置和宽高是手动设置的,现在我们来写个js方法,让代码更友好:

综合实例2

效果预览

示例2

代码实现

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>矩形实例2</title></head><body><canvas id="canvas" width="600" height="600"></canvas><script>function load() {// 获取画布元素let canvas = document.getElementById('canvas')// 获取上下文对象let ctx = canvas.getContext("2d")// 设置初始位置和初始宽度let startX = 10let startY = 10let width = 500let height = 500// 设置步长 两个可见矩形见的间距const step = 15for (let i = 0; width > 30 && height > 30; i++) {if (i === 0) {// 第一个矩形是边框矩形ctx.strokeRect(startX, startY, width, height)}// 先绘制填充矩形ctx.fillRect(startX + step / 2, startY + step / 2, width - step, height - step);// 计算下一个矩形的起始点和宽高startX += stepstartY += stepwidth -= 2 * stepheight -= 2 * stepif (width > 15 && height > 15) {// 再将填充矩形内部清除ctx.clearRect(startX, startY, width, height)}}}load();</script></body>
</html>

结语

本文主要介绍了Canvas中矩形的几种绘制方式,对于文章中错误的地方或者有任何问题,欢迎在评论区留言分享!

http://www.xdnf.cn/news/2988.html

相关文章:

  • 废品回收小程序:全链路数字化解决方案,赋能绿色未来
  • SDC命令详解:使用get_nets命令进行查询
  • windows如何使用cmd命令翻转屏幕
  • 多源数据整合与数据虚拟化:构建灵活、高效的数据架构
  • RPG2.设置角色摄像机
  • js day9
  • 按键精灵安卓ios辅助工具脚本:实用的文件插件(lua开源)
  • 解决ktransformers v0.3 docker镜像中 operator torchvision::nms does not exist 问题
  • Redis入门到实战——基础篇
  • JavaSE第12篇:接口interface
  • Shopify网上商店GraphQL Admin接口查询实战
  • keep-alive具体使用方法
  • 我心中的现代前端大厦
  • LabVIEW模板之温度监测应用
  • dx11 龙宝书 第五 六章 流水线
  • leetcode 2962. 统计最大元素出现至少 K 次的子数组 中等
  • 规范编码策略以及AST的应用的学习
  • 如何使用 Nacos 对 Python 服务进行服务发现与注册
  • 【Dify系列教程重置精品版】第三章:Dify平台的本地化部署
  • Idea 如何配合 grep console过滤并分析文件
  • 关于浏览器对于HTML实体编码,urlencode,Unicode解析
  • Janus-1B评测
  • vue 优化策略,大白话版本
  • 一页概览:统一数据保护方案
  • Discord多账号注册登录:如何同时管理多个账户?
  • 全球667629个流域90m分辨率数据(流域参数含:面积、长度、宽度、纵横比、坡度和高程等)
  • 借助Spring AI实现智能体代理模式:从理论到实践
  • 案例解析:基于量子计算的分子对接-QDOCK(Quantum Docking)
  • 2025年深圳软件开发公司推荐
  • Laravel+API 接口