`
BuN_Ny
  • 浏览: 85545 次
  • 来自: 济南
社区版块
存档分类
最新评论

Canvas教程:绘制图形

阅读更多

网格

    在真正开始之前,我们需要先探讨 canvas 的网格(grid)或者坐标空间(coordinate space)。在前一页的HTML模板里有一个150像素宽, 150像素高的 canvas 对象。我在画面上叠加上默认网格,如图。通常网格的1个单元对应 canvas 上的1个像素。网格的原点是定位在左上角(坐标(0,0))。画面里的所有物体的位置都是相对这个原点。这样,左上角的蓝色方块的位置就是距左边x像素和距上边Y像素(坐标(x, y))。后面的教程中我们将学会如何把移动原点,旋转以及缩放网格。不过现在我们会使用默认的状态。

 

绘制图形

    不像 SVG,canvas 只支持一种基本形状——矩形,所以其它形状都是有一个或多个路径组合而成。还好,有一组路径绘制函数让我们可以绘制相当复杂的形状。

 

矩形

    我们首先看看矩形吧,有三个函数用于绘制矩形的:

fillRect(x,y,width,height);  //绘制一个实心矩形
strokeRect(x,y,width,height);  //绘制一个矩形轮廓
clearRect(x,y,width,height);  //清空特定区域并使其完全透明

    它们都接受四个参数, x 和 y 指定矩形左上角(相对于原点)的位置,width 和 height 是矩形的宽和高。好,实战一下吧。

    下面就是上页模板里的 draw() 函数,但添加了上面的三个函数。

 

绘制矩形的例子

function draw(){
  var canvas = document.getElementById('tutorial');
  if (canvas.getContext){
    var ctx = canvas.getContext('2d');

    ctx.fillRect(25,25,100,100);
    ctx.clearRect(45,45,60,60);
    ctx.strokeRect(50,50,50,50);
  }
}

    出来的结果应该和右边的是一样的。fillRect 函数画了一个大的黑色矩形(100x100),clearRect 函数清空了中间 60x60 大小的方块,然后strokeRect 函数又在清空了的空间内勾勒出一个 50x50 的矩形边框。在接下去的页面里,我们会看到和 clearRect 函数差不多另外两个方法,以及如何去改变图形的填充和边框颜色。

    与下一节的路径函数不一样,这三个函数的效果会立刻在 canvas 上反映出来。

 

绘制路径

    不像画矩形那样的直截了当,绘制路径是需要一些额外的步骤的。

beginPath();
closePath();
stroke();
fill();

    第一步是用 beginPath 创建一个路径。在内存里,路径是以一组子路径(直线,弧线等)的形式储存的,它们共同构成一个图形。每次调用 beginPath,子路径组都会被重置,然后可以绘制新的图形。

    第二步就是实际绘制路径的部分,很快我们就会看到。

    第三步是调用 closePath 方法,它会尝试用直线连接当前端点与起始端点来关闭路径,但如果图形已经关闭或者只有一个点,它会什么都不做。这一步不是必须的。

    最后一步是调用 stroke 或 fill 方法,这时,图形才是实际的绘制到 canvas 上去。stroke 是绘制图形的边框,fill 会用填充出一个实心图形。

    注意:当调用 fill 时,开放的路径会自动闭合,而无须调用 closePath 。

    画一个简单图形(如三角形)的代码如下。

 

ctx.beginPath();
ctx.moveTo(75,50);
ctx.lineTo(100,75);
ctx.lineTo(100,25);
ctx.fill();
 

 

moveTo

    moveTo 是一个十分有用的方法,虽然并不能用它来画什么,但却是绘制路径的实用方法的一部分。你可以把它想象成是把笔提起,并从一个点移动到另一个点的过程。

    它接受 x 和 y (新的坐标位置)作为参数。

    当 canvas 初始化或者调用 beginPath 的时候,起始坐标设置就是原点(0,0)。大多数情况下,我们用 moveTo 方法将起始坐标移至其它地方,或者用于绘制不连续的路径。看看下面的笑脸,红线就是使用 moveTo 移动的轨迹。

试一试下面的代码,粘贴到之前用过的 draw 函数内在看看效果吧。

 

moveTo 的使用示例

ctx.beginPath();
ctx.arc(75,75,50,0,Math.PI*2,true); // Outer circle
ctx.moveTo(110,75);
ctx.arc(75,75,35,0,Math.PI,false);   // Mouth (clockwise)
ctx.moveTo(65,65);
ctx.arc(60,65,5,0,Math.PI*2,true);  // Left eye
ctx.moveTo(95,65);
ctx.arc(90,65,5,0,Math.PI*2,true);  // Right eye
ctx.stroke();

//thegoneheart 完整例子

ctx.beginPath();
ctx.arc(75,75,50,0,Math.PI*2,true); // Outer circle
ctx.moveTo(110,75);
ctx.arc(75,75,35,0,Math.PI,false);   // Mouth (clockwise)
ctx.moveTo(65,65);
ctx.arc(60,65,5,0,Math.PI*2,true);  // Left eye
ctx.moveTo(95,65);
ctx.arc(90,65,5,0,Math.PI*2,true);  // Right eye
ctx.stroke();

ctx.beginPath();
ctx.moveTo(40,75);
ctx.lineTo(60,65);
ctx.lineTo(90,65);
ctx.moveTo(110,75);
ctx.lineTo(125,75);
ctx.stroke();
注意:你可以注释 moveTo 方法来观察那些连接起来的线。

注意:arc 方法的用法见下面。

 

分享到:
评论

相关推荐

    canvas学习(十六):绘制时钟

    在本篇【canvas学习(十六):绘制时钟】中,我们将探讨HTML5中的Canvas API,它是Web开发中用于在网页上动态绘制图形的强大工具。Canvas API允许开发者使用JavaScript来绘制2D图形,包括简单的线条、形状以及复杂的...

    HTML5 Canvas核心技术:图形、动画与游戏开发 mobi

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,创建复杂的动画以及构建交互式的游戏。这本书《HTML5 Canvas核心技术:图形、动画与游戏开发》由David Geary撰写,深入探讨了Canvas...

    Android 自定义画布canvas 实现绘制和清空画布功能

    在`onDraw()`方法中,系统会为我们提供一个Canvas对象,我们可以调用其方法来绘制图形。 1. **获取Canvas对象** 在`onDraw()`方法中,通过`Canvas canvas = this.getCanvas();`获取Canvas实例。这个canvas就是我们...

    canvas教程

    canvas 是新的 HTML 元素,可以通过 Script(通常是 JavaScript)绘制图形,用于画图、组合图像,或做简单的动画。 Canvas 教学 Canvas 元素是 WhatWG Web applications 1.0(又称为 HTML 5)规范的一部分。使用...

    canvas:使用canvas绘制图形

    "canvas:使用canvas绘制图形"这一主题,将深入探讨如何利用JavaScript在Canvas元素上绘制各种形状、图像以及进行动画处理。 Canvas API提供了两个主要的对象:`CanvasRenderingContext2D`和`WebGLRenderingContext`...

    HTML5CANVAS初级入门教程.pdf

    HTML5 Canvas 初级入门教程 HTML5 Canvas 是 HTML5 中一个非常重要的功能,它允许开发者在浏览器中绘制图形,而不需要使用...使用 canvas 元素、2d 渲染环境、坐标系统和绘制图形等概念,可以创建出非常漂亮的图形。

    HTML 5 Canvas基础教程 源码+PDF

    《HTML 5 Canvas基础教程》从HTML5和JavaScript(以及jQuery)的基础知识讲起,全面介绍了HTML5Canvas的各种特性,包括渲染上下文、坐标系统、绘制图形、保存和恢复画布状态,以及变形、合成、处理图像和视频等,让...

    HTML5Canvas基础教程

    资源名称:HTML5 Canvas基础教程内容简介:《HTML5 Canvas基础教程》从HTML5和Javascript(以及jQuery)的基础知识讲起,全面介绍了HTML5 Canvas的各种特性,包括渲染上下文、坐标系统、绘制图形、保存和恢复...

    基于C#开发的图像绘制、Canvas绘图及图片处理应用开发

    本教程主要聚焦于使用C#进行图像绘制与处理,利用Canvas这一强大的绘图工具,实现多种图形操作和效果。 首先,我们要了解Canvas是WPF(Windows Presentation Foundation)框架中的一个关键元素,它提供了一个二维...

    使用canvas绘制钟表

    在HTML5中,Canvas元素提供了一个可编程的2D绘图环境,允许开发者直接在网页上绘制图形。本教程将详细介绍如何使用canvas绘制一个动态的钟表,这涉及到JavaScript和Canvas API的基础知识。 首先,我们需要在HTML...

    draw2d 绘制图形教程

    《draw2d绘制图形教程详解》 在计算机编程领域,可视化和交互式界面设计是不可或缺的部分,而draw2d库正是这样一个专注于二维图形绘制的工具。draw2d库,全称为Draw2D,是一个开源的JavaScript库,它允许开发者在...

    HTML5canvas初级入门教程.pdf

    Canvas的核心在于2D渲染上下文(2d rendering context),这是一个JavaScript对象,提供了丰富的API用于在Canvas上绘制图形。要获取这个对象,可以使用`getContext('2d')`方法: ```javascript var canvas = ...

    Html5 Canvas史上最全面的教程

    `<canvas>` 是一个简单的HTML元素,它主要用于绘制图形和图像。与其他元素如 `<img>` 不同,`<canvas>` 没有内置的源图像属性(如 `src` 和 `alt`),而是通过JavaScript脚本来动态地创建图像。因此,`<canvas>` ...

    PaintFX:绘制图形用户界面

    《PaintFX:绘制图形用户界面》 在Java编程领域中,构建美观且功能丰富的图形用户界面(GUI)是一项重要的任务。PaintFX项目提供了一种工具集,帮助开发者更有效地实现这一目标。本文将深入探讨PaintFX的核心概念、...

    如何在Web页中绘制图形

    在Web开发中,绘制图形是一项重要的技能,它可以让网页变得更加生动和交互性更强。本教程将探讨如何在Web页面上创建动态图形,并提供一个实例源码来帮助理解这一过程。 首先,我们需要了解基本的绘图工具。HTML5...

    Delphi Canvas 填充 区域 图形

    这通常涉及到两个主要步骤:绘制图形边界(如矩形)和填充图形内部。在Delphi中,可以使用如`DrawRect`和`FillRect`函数来实现这个过程。`DrawRect`用于绘制矩形边框,而`FillRect`用于填充矩形内部。 描述中提到的...

    HTML5 canvas仿屏保动态管道

    HTML5 canvas 是一种在网页上绘制图形的API,它允许开发者通过JavaScript动态创建和修改二维图形,从而实现丰富的视觉效果。在这个"HTML5 canvas仿屏保动态管道"项目中,我们利用canvas元素来模仿经典的Windows屏保...

    WPF经典教程之Canvas、InkCanvas布局

    **WPF经典教程之Canvas布局** Canvas是WPF中一种特殊的布局控件,它允许开发者对子元素进行绝对定位。在Canvas中,每个子元素的位置是通过设置`Canvas.Left`、`Canvas.Right`、`Canvas.Top`和`Canvas.Bottom`属性来...

    JavaScript实现使用Canvas绘制图形的基本教程

    Canvas让开发者能够在网页上进行复杂的绘图操作,如绘制图形、图像、动画等等。在HTML5中使用Canvas元素,可以实现客户端绘图,不再完全依赖服务器端生成图片,这大大提高了效率和交互性。 在本文中,将介绍如何...

Global site tag (gtag.js) - Google Analytics