Canvas绘图基础(一)

简单图形绘制

矩形:描边与填充

Canvas的API提供了三个方法,分别用于矩形的清除、描边及填充

clearRect(double x, double y, double w, double h)

strokeRect(double x, double y, double w, double h)

fillRect(double x, double y, double w, double h)

看一下这三个方法的使用

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
  <meta charset="utf-8">
  <title>TESTAPP</title>
  <style>
    * {
      padding: 0;
      margin: 0;
    }
    #canvas {
      background: #ccc;
      border: 1px solid #aaa;
      border-radius: 8px;
      display: block;
      margin: 20px auto;
    }
  </style>
</head>
<body>
<canvas id="canvas" width="600" height="400">
  Canvas is not supported.
</canvas>
<script>
 var cvs = document.getElementById(‘canvas‘);
  ctx = cvs.getContext(‘2d‘);
  ctx.lineJoin = ‘round‘;
  ctx.lineWidth = 30;
  ctx.font = "24px Helvetica";
  ctx.fillText("Click anywhere to erase", 175, 40);
  ctx.strokeRect(75, 100, 200, 200);
  ctx.fillRect(325, 100, 200, 200);
  ctx.canvas.onmousedown = function(e) {
    ctx.clearRect(0, 0, cvs.width, cvs.height);
  };
</script>
</body>
</html>

clearRect(double x, double y, double w, double h)

该方法将指定矩形与当前剪辑区域相交范围内的所有像素清除。

在默认情况下,剪辑区域的大小就是整个canvas,所以,如果你没有改动剪辑区域的话,那么在参数所指范围内的所有像素都会被清除。所谓“清除像素”,指的是将其颜色设置为全透明的黑色。这在实际效果上就等同域“擦除”erase或者“清除”clear了某个像素,从而使得canvas的背景可以透过像素显示出来。

strokeRect(double x, double y, double w, double h)

使用如下属性,为指定的矩形描边

strokeStyle lineWidth lineJoin miterLimit

fillRect(double x, double y, double w, double h)

使用fillStyle属性填充指定的矩形。

线段

Canvas绘图环境提供了两个可以用来创建线性路径的方法:moveTo() lineTo(),要使用线性路径(也就是线段)出现在canvas中,在创建路径之后还要调用stroke()方法。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
  <meta charset="utf-8">
  <title>TEST APP</title>
  <style>
    * {
      padding: 0;
      margin: 0;
    }
    #canvas {
      background: #ccc;
      border: 1px solid #aaa;
      border-radius: 8px;
      display: block;
      margin: 20px auto;
    }
  </style>
</head>
<body>
<canvas id="canvas" width="600" height="400">
  Canvas is not supported.
</canvas>
<script>
 var cvs = document.getElementById(‘canvas‘);
  ctx = cvs.getContext(‘2d‘);
  ctx.lineWidth = 1;
  ctx.beginPath();
  ctx.moveTo(50, 10);
  ctx.lineTo(550, 10);
  ctx.stroke();
  ctx.beginPath();
  ctx.strokeStyle = "#f00";
  ctx.moveTo(50, 100);
  ctx.lineTo(550, 100);
  ctx.stroke();
</script>
</body>
</html>

圆弧与圆形

Canvas绘图环境提供了两个用于绘制圆弧与圆形的方法: arc() arcTo()

arc(x, y, radius, startAngle, endAngle, counterClockwise)

前面两个参数表示圆心坐标,radius表示圆半径,startAngle和endAngle表示浏览器在圆周上绘制圆弧的起始角度和终结角度,最后一个参数,counterClockwise是可选的,true,是逆时针画圆,false,顺时针画圆。

arcTo(x1, y1, x2, y2, radius)

参数意为两个点与半径

该方法以指定的半径来绘制一条圆弧,绘制的圆弧与当前点到第一个点(x1, y1)的连线相切,而且与第一个点到第二个点(x2, y2)的连线也相切,由于这些特性,该方法非常适合绘制矩形的圆角。

坐标变换:平移、缩放与旋转

这里看一个小例子,也许这里坐标原点的移动并没有带来多大的好处,但想像一下,如果你需要绘制的是很多图形的情景

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
  <meta charset="utf-8">
  <title>TEST APP</title>
  <style>
    * {
      padding: 0;
      margin: 0;
    }
    #canvas {
      background: #ccc;
      border: 1px solid #aaa;
      border-radius: 8px;
      display: block;
      margin: 20px auto;
    }
  </style>
</head>
<body>
<canvas id="canvas" width="600" height="400">
  Canvas is not supported.
</canvas>
<script>
  var cvs = document.getElementById("canvas"),
  ctx = cvs.getContext(‘2d‘),
  RECTANGLE_WIDTH = 100,
  RECTANGLE_HEIGHT = 100;
  //没有移动坐标原点的情况
  ctx.strokeRect(cvs.width / 2 - RECTANGLE_WIDTH ,
    cvs.height / 2 - RECTANGLE_HEIGHT,
    RECTANGLE_WIDTH, RECTANGLE_HEIGHT);
  //移动坐标原点
  ctx.translate(cvs.width / 2 - RECTANGLE_WIDTH / 2, cvs.height / 2 - RECTANGLE_HEIGHT / 2);
  ctx.beginPath();
  ctx.strokeStyle = "#f00";
  ctx.strokeRect(0, 0, RECTANGLE_WIDTH, RECTANGLE_HEIGHT);
</script>
</body>
</html>

 

本文所有前端代码均在谷歌浏览器测试,其他浏览器没有测试过

时间: 2024-11-11 00:30:50

Canvas绘图基础(一)的相关文章

Android中Canvas绘图基础详解(附源码下载)

Android中,如果我们想绘制复杂的自定义View或游戏,我们就需要熟悉绘图API.Android通过Canvas类暴露了很多drawXXX方法,我们可以通过这些方法绘制各种各样的图形.Canvas绘图有三个基本要素:Canvas.绘图坐标系以及Paint.Canvas是画布,我们通过Canvas的各种drawXXX方法将图形绘制到Canvas上面,在drawXXX方法中我们需要传入要绘制的图形的坐标形状,还要传入一个画笔Paint.drawXXX方法以及传入其中的坐标决定了要绘制的图形的形状

Android中Canvas绘图基础详解

原文:http://blog.csdn.net/iispring/article/details/49770651 Android中,如果我们想绘制复杂的自定义View或游戏,我们就需要熟悉绘图API.Android通过Canvas类暴露了很多drawXXX方法,我们可以通过这些方法绘制各种各样的图形.Canvas绘图有三个基本要素:Canvas.绘图坐标系以及Paint.Canvas是画布,我们通过Canvas的各种drawXXX方法将图形绘制到Canvas上面,在drawXXX方法中我们需要

Canvas绘图基础

Canvas HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成. <canvas> 标签只是图形容器,您必须使用脚本来绘制图形. 你可以通过多种方法使用 canvas 绘制路径,盒.圆.字符以及添加图像. Canvas初始化 创建画布 canvas默认画布大小:300*150px <canvas id="myCanvas" width="600px" height="300px&

canvas绘图基础及基于粒子系统的雪花飘落

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> </head> <body> <script> //全局变量 var canvas = document.createElement('canvas'); var canvasContext

HTML5自学笔记[ 17 ]canvas绘图基础4

绘制图像: drawImage(oImg,x,y),oImg是一个Image对象,(x,y)为绘制起点,绘制的图像大小和源图大小一样. drawImage(oImg,x,y,w,h),后两个参数设置绘制后的图形大小. drawImage(oImg,x1,y1,w1,h1,x2,y2,w2,h2),该方法获取源图像的一部分进行绘制并且指定绘制起点和绘制后图像的大小,x1/y1/w1/h1表示选取源图上(x1,y1)点起宽w1高h1的部分,x2/y2/w2/h2表示将选取的部分绘制到画布(x2,y2

HTML5自学笔记[ 14 ]canvas绘图基础2

canvas绘制路径不仅可以绘制直线和多边形,还提供了绘制曲线的方法,利用这些方法可以画出多种曲线效果. 方法1:arc(x,y,r,起始弧度,结束弧度,绘制方向);其中(x,y)为圆心坐标,r为半径,弧度计算公式:deg*Math.PI/180,绘制方向默认为false表示顺时针绘制 ,设置为true时,逆时针绘制. 例1,顺时针绘制0-90°圆弧: 1 oContext.beginPath(); 2 3 oContext.arc(300,300,200,0,90*Math.PI/180,fa

HTML5自学笔记[ 15 ]canvas绘图基础6

关于线条的一些属性: lineCap,这个属性表示的是线条两端的样式,值有butt(默认)/round/square. lineJoin,这个属性表示线条相交的方式,值有miter(默认)/bevel/round: miterLimit,该属性指定默认情况下lineJoin采用miter方式的极限值:比如,在上面的例子中,将miterLimit设置为1,那么第一个图的两条线的相交方式就会自动转变为bevel.

Android中Canvas绘图之Shader使用图文详解

概述 我们在用Android中的Canvas绘制各种图形时,可以通过Paint.setShader(shader)方法为画笔Paint设置shader,这样就可以绘制出多彩的图形.那么Shader是什么呢?做过GPU绘图的同学应该都知道这个词汇,Shader就是着色器的意思.我们可以这样理解,Canvas中的各种drawXXX方法定义了图形的形状,画笔中的Shader则定义了图形的着色.外观,二者结合到一起就决定了最终Canvas绘制的被色彩填充的图形的样子. 类android.graphics

Android中Canvas绘图之PorterDuffXfermode使用及工作原理详解

概述 类android.graphics.PorterDuffXfermode继承自android.graphics.Xfermode.在用Android中的Canvas进行绘图时,可以通过使用PorterDuffXfermode将所绘制的图形的像素与Canvas中对应位置的像素按照一定规则进行混合,形成新的像素值,从而更新Canvas中最终的像素颜色值,这样会创建很多有趣的效果.当使用PorterDuffXfermode时,需要将将其作为参数传给Paint.setXfermode(Xfermo