----->Canvas绘制基础

1,线条绘制

1-1,线条组成的图形和beginPath

案例:绘制由不同颜色的线条组成的图案


1-2,多边形的填充和closePath

案例:绘制封闭具有填充色的图案

1,绘制封闭图案

2,填充图案

context.fillStyle="yellow";//定义填充色
context.fill();//执行填充操作

注意:先填充和先绘制图案的结果是不一样


1-3,绘制矩形

context.rect(x,y,width,heigth);//定义矩形
context.fillRect(x,y,width,height);//定义矩形并填充(无边框)
context.strokeRect(x,y,width,height);//定义矩形并绘制(无填充)

2,线条的属性

2-1,线条的帽子:lineCap

//javascript 语法
context.lineCap="butt|round|square";


2-2,线条的连接:lineJoin和miterLimit

//javascirpt 语法
context.lineJoin="bevel|round|miter";

miterLimit 最大斜接长度。

提示:只有当 lineJoin 属性为 "miter" 时,miterLimit 才有效。

边角的角度越小,斜接长度就会越大。

为了避免斜接长度过长,我们可以使用 miterLimit 属性。

如果斜接长度超过 miterLimit 的值,边角会以 lineJoin 的 "bevel" 类型来显示

对于斜接长度的定义我所知道的目前有两个版本

W3School:http://www.w3school.com.cn/tags/canvas_miterlimit.asp

斜接长度指的是在两条线交汇处内角和外角之间的距离。

慕课网liuyubobobo:http://www.imooc.com/video/3492

遇到这样的分歧,那就来举例验证吧

  var canvas=document.getElementById("canvas");
var context=canvas.getContext("2d");
window.onload=function(){
canvas.width=800;
canvas.height=800;
context.lineWidth=20; context.moveTo(100,100);
context.lineTo(500,120);
context.lineTo(100,140);
context.miterLimit=21;
context.stroke(); context.beginPath();
context.moveTo(100,200);
context.lineTo(500,220);
context.lineTo(100,240);
context.miterLimit=10;
context.stroke();
//辅助线
context.beginPath();
context.moveTo(100,100);
context.lineTo(500,120);
context.lineTo(100,140);
context.lineWidth=1;
context.strokeStyle="#fff";
context.stroke();
};

以上代码可以得到下面的两个结果

由此可以证明这两种对斜接长度的定义都是错误的

于是萌发了这样的猜想(目测是比较符合的)

使用特殊的90度角来验证一下是否正确

如果我的猜想正确的话那么miterLimit要设置为>=15,拐角才会呈现出尖角形状

实际结果是:

当miterLimit=1时,拐角是斜角bevel类型来显示的;

当miterLimit=2时,拐角是尖角miter类型来显示的;

所以该图像的斜接长度值是在(1,2]区间内的,则我的猜想值10*2^(1/2) 也是错误

实在搞不清这个斜接长度是指哪里的长度了,暂时告一段落。

3,图形变换

3-1,translate(x,y):重新映射画布上的 (0,0) 位置

3-2,rotate(angle):旋转当前绘图

angle:

旋转角度,以弧度计。

如需将角度转换为弧度,请使用 degrees*Math.PI/180 公式进行计算。

举例:如需旋转 5 度,可规定下面的公式:5*Math.PI/180。

3-3,scale():缩放当前绘图至更大或更小

context.scale(scaleWidth,scaleHeight);

scaleWidth,scaleHeight:缩放当前绘图的宽度/高度 (1=100%, 0.5=50%, 2=200%, 依次类推)

注释:如果您对绘图进行缩放,所有之后的绘图也会被缩放。定位也会被缩放。

3-4,transform():替换绘图的当前转换矩阵

有关图形矩阵变换:http://www.cnblogs.com/TianFang/p/3920734.html

//javascript 语法
context.transform(a,b,c,d,e,f);

画布上的每个对象都拥有一个当前的变换矩阵。

即变换矩阵为单位矩阵时,图形是没有做变换的: context.transform(1,0,0,1,0,0);

注释:该变换会影响 transform() 方法调用之后的绘图。

如果需要重置变换矩阵/重置后再变换可以使用 setTransform()

setTransform() 方法把当前的变换矩阵重置为单位矩阵,然后以相同的参数运行transform();

【HTML5】Canvas绘图详解-1的更多相关文章

  1. HTML5 Canvas绘图详解 drawImage() 方法 有图有真相!

    步骤 1 2 3 4 5   简介 是一个新的HTML元素,这个元素可以被Script语言(通常是JavaScript)用来绘制图形.例如可以用它来画图.合成图象.或做简单的(和不那么简单的)动画. ...

  2. 【转】Android Canvas绘图详解(图文)

    转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android Canvas绘图详解(图文) 泡 ...

  3. Android Canvas绘图详解(图文)

    编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! Andr ...

  4. canvas绘图详解笔记之线条及线条属性

    创建 canvas 首先创建一个canvas元素,我们只需要在html文件中加入这么一句代码: <canvas id="canvas">当前浏览器不支持canvas,请 ...

  5. 【转】Android Canvas绘图详解

    转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android中使用图形处理引擎,2D部分是an ...

  6. canvas绘图详解-06-绘制一个五角星-常用绘图原理

    先将如何画一个正规的五角星 在五角星的内外画两个圆,五角星有五个角,360/5=72度 所以得出这两个角的度数 然后算出这两个点坐标 角度转弧度 角度/180*Math.PI 所以外顶点坐标 x:   ...

  7. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  8. HTML5 Canvas绘图如何使用

    --------------复制而来--原地址http://jingyan.baidu.com/article/ed15cb1b2e642a1be369813e.html HTML5 Canvas绘图 ...

  9. 最全html5 meta设置详解 (转)

    meta 详解,html5 meta 标签日常设置   <!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html la ...

随机推荐

  1. MapReduce:实现文档倒序排序,且字符串拼接+年+月+日

    写出MapReduce程序完成以下功能. input1: -- a -- b -- c -- d -- a -- b -- c -- c input2: -- b -- a -- b -- d -- ...

  2. JSP实现原理

    JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. 起源: 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要 ...

  3. ThinkPHP关于模板的一些嵌套、IF判断使用

    > ##### 前言,现在有一组数据(涉及到3个数据表,order订单表,order_process办理流程表,process_status流程描述表),根据当前订单,展示相应信息 1.办理流程 ...

  4. Tomcat出现java.lang.Exception: Socket bind failed

    今天测试系统,Tomcat(apache-tomcat-6.0.20windows版)突然出现异常,导致JSP页面无法运行.错误提示如下:2014-3-12 17:13:29 org.apache.c ...

  5. java 类的加载、连接和初始化

    JVM和类 调用Java命令运行Java程序时,该命令将会启动一条Java虚拟机进程,不管该Java程序启动了多少条线程,创建了多少个变量,它们都处于该Java虚拟机进程里,共享该JVM进程的内存区. ...

  6. 技术分享:HBase架构

    Zookeeper,作为分布式的协调.RegionServer也会把自己的信息写到ZooKeeper中. HDFS是Hbase运行的底层文件系统 RegionServer,理解为数据节点,存储数据的. ...

  7. UIElement.IsMouseCaptured属性的应用

    一个只读属性,该值描述了此元素是否捕获到了鼠标,如果该值为true,则说明此元素捕获到了鼠标:否则,未捕获到(例如:当鼠标进入到一个Button的可视化范围之内,当Button按钮外观效果发生了变化时 ...

  8. sql 生成随机数 以及不重复随机数

    背景:想在表中随机取10条记录,让取出来的数据不重复(表中必须是有个递增列,且递增从1开始间隔为1).  数据表: CREATE TABLE testable ( id INT  IDENTITY(1 ...

  9. RegularExpressions(正则表达式)

    最近在不少地方用到了正则表达式,一直对这一块不太熟悉,今天写一些关于正则表达式的知识,一来是总结自己学的知识,二来今后忘记了可以及时的复习. 在java中想应用正则表达式带来的好处,必须先了解两个类, ...

  10. python 2 3 读写中文文件 使用codecs最方便

    codecs进行文件的读取 python给我们提供了一个包codecs进行文件的读取,这个包中的open()函数可以指定编码的类型: import codecs f = codecs.open('te ...