canvas入门笔记

1.Canvas的使用注意  A.要在页面中添加一对canvas标记,默认占300*150的区域  B.我们可以通过html属性‘width’,‘height’来设置canvas的宽高,不可以通过css属性来设置宽高。  C.Canvas相当于是一张白纸,如果想要在这个白纸上绘图,你需要一套绘图工具   获取绘图工具的方式:var ctx = Canvas.getContext(‘2d‘);

练习:

2.Canvas绘制会用到的方法  ctx.moveTo(x,y):将绘图工具移动到x,y坐标点  ctx.lineTo(x,y):将绘图工具从上一个点到x,y点虚描一条线    ctx.stroke():将虚描的内容使用实线绘制出来。  ctx.fill();在绘制好的图形中填充颜色(默认黑色).                    fill会将起始点(moveTo)和结束点(最后一个lineTo)连起来,然后在形成的图形中填充黑色。  ctx.closePath():将绘图的起始点绘图的结束点进行连接,最后闭合图形。  ctx.beginPath():开启新路径。  ctx.setLineDash([数组]) :设置虚线的数组,当划线的时候采用这个数组中的数字作为虚线的数据   ctx.getLineDash():获取虚线的数组

Canvas绘制使用到的属性:  ctx.lineWidth = 10;  设置绘图的线宽  ctx.lineCap = "round";  设置线帽  ctx.lineJoin = ‘round‘;  设置线拐  ctx.lineDashOffset = 值;  设置虚线的缩进   ctx.strokeStyle = ‘red‘;  设置描边的颜色  ctx.fillStyle =‘green‘; 设置填充的颜色

3.非零环绕原则:如果想要对一块区域进行填充,我们需要使用非零环绕原则来判断是否进行填充   在这一块区域随便选一个点,随便向任意方向拉出去到外面的一个L线,   此时如果画的图的线条穿过L线时是顺时针的,那么就记做+1   此时如果画的图的线条穿过L线时是逆时针的,那么就记做-1   最后把所有记录的值进行求和,如果为0,代表不填充,其他情况要填充。

4.线宽的问题:Canvas在进行绘制线条的时候,如果线宽只要奇数值都会去做取消锯齿,比如说lineWidth设置为9,中心很黑的芯就是8px,两边各1px的淡淡的灰色的模糊边缘。 线宽的中心才是线的起始位置

5.closePath  和 lineTo进行闭合的区别: closePath进行图形的闭合会是完美闭合, lineTo进行图形的闭合的时候,如果线宽比较宽的情况下,看起来就有问题。

结论:以后如果要闭合图形请使用closePath();

6.开启新路径:绘图的时候会设置线宽,线颜色,填充,划线, 如果想要有多个状态的图形存在,我们必须开启新路径。 先画一个填充的图形  fill()

开启新路径; 然后又画一个线条图形  stroke();

7.如何使用面向对象的方式进行编程:  (1).找找看有没有系统对象或者第三方库可以帮助你完成功能  (2).如果没有,那么我们需要自己来创建这样一个对象来完成这个功能   A.想要创建这个对象,先要创建这个对象的构造函数   B.通过构造函数的参数我们把对象需要使用到的数据传递,赋值给对象   C.把我们需要实现的功能设置为原型的方法,这样的话,所有构造函数创建出来的对象都有这个功能方法了。   D.new 一个对象,调用对象的功能方法完成功能。

————————————————————————————————————————

1. 什么是 Canvas  就是 HTML 5 给出的一个可以展示绘图内容的标签.  最早是 苹果公司 提出的该标签.

threejs.org 里面有汽车等 3D 的仿真

2. 基本使用  1> 提供 Canvas 标签即可. 默认就会占据 300 * 150 的区域  2> 利用 html 属性为它设置宽高. 不要使用 CSS 来设置.   使用 属性设置 canvas 标签的宽高, 实际上相当于增加了 canvas 画布的像素   但是如果使用 CSS 来设置画布的大小, 那么不会增加像素点, 只是将像素扩大了  3> Canvas 只能展示绘图的内容. 但是不能进行绘图   利用 Canvas 找到绘图工具   每一个 Canvas 都有一套工具, 利用工具可以在当前 Canvas 上进行绘图   使用语法 canvas.getContext( ‘2d‘ ) 就返回一个在当前画布上绘图的工具集   这个工具集专门绘制 平面图形. 如果要绘制 立体的图形需要传入 ‘webgl‘   绘制 平面图形的 对象是 CanvasRenderingContext2D 类型的  4> 开始绘图   首先需要绘制点, 然后需要将这些点描边吗才可以看到东西

3. 绘图的坐标系    在绘图板上描述出下列点的位置

( 100, 100 ), ( 0, 100 ), ( 100, 0 ), ( -10, 100 ), ( 100, -10 )

4. 绘图的常用方法  ctx.moveTo( x, y ) 将绘图的起始点设置为 x,y  ctx.lineTo( x, y )  从当前位置, 绘制直线到 x,y  ctx.stroke()  就是将刚刚绘制的所有的点联系起来. 就可以看到图形了.

5. 绘制方法  ctx.stroke()  ctx.fill()  调用 fill 方法会将所有的点连接起来, 并构成一个封闭的图形结构      如果所有的描点没有构成封闭结构, 也会将开始的起点, 与最终的点      连接起来, 构成一个闭合的图形, 并在里面填充颜色(默认黑色)

6. 非零环绕原则  如果需要判断某一个区域是否需要填充颜色. 就从该区域中随机的选取一个点.  从这个点拉一条直线出来, 一定要拉到图形的外面. 此时以该点为圆心.  看穿过拉出的直线的线段. 如果是顺时针方向就记为 +1, 如果是 逆时针方向,  就记为 -1. 最终看求和的结果. 如果是 0 就不填充. 如果是 非零 就填充.

7. 闭合路径  closePath()

lineWidth 设置绘制图形的线宽

closePath 与 直接使用 lineTo 闭合是有区别的

8. Canvas 中绘图是有状态的  背景  粉色  正方形  红色  边框 蓝色

Canvas 绘图是含有状态的, 在需要改变颜色, 绘制方法, 改变一些属性... 就需要  改变绘图状态. 使用 beginPath() 方法. 开启一个新的路径.

9. 虚线  ctx.setLineDash( 数组 )  ctx.getLineDash()  ctx.lineDashOffset = 值

数组中存储的数字就是分别表示 实线部分与空白部分的长度 [ 10 ]

10. 如何设置描边与填充的颜色  ctx.strokeStyle  设置描边的颜色  ctx.fillStyle  设置填充的颜色

11. 将直线进行封装  function Line () {}

var line = new Line( x0, y0, x1, y1 );   line.stroke();

————————————————————————————————————————————

1. 绘制折线图  假设有点: ( 10, 20 ), ( 15, 13 ), ( 17, 30 ), ( 30, 10 ), ( 20, 15 )  将这些点绘制到坐标轴中.

2. 绘制形状  -> 矩形   ctx.rect( x, y, width, heigth )  描边, 需要 stroke 或 fill   ctx.strokeRect( x, y, w, h )   ctx.fillRect( x, y, w, h )   ctx.clearRect( x, y, w, h )   清除该矩形区域的内容

-> 清除整个画布   ctx.clearRect( 0, 0, cas.width, cas.height );

cas.width = cas.width;

-> 圆弧   ctx.arc( x, y, r, startAngle, endAngle, clockwise )   ctx.arcTo() 了解

3. 弧度制  为了更好的计算角度, 我们该角度提供一个新的定义, 用 PI 作为单位  将单位圆的一个整圈( 360 度 )记作 2 倍 的 PI.

这样的度量表示就是弧度制的表示方法.

60 度 PI / 3  45 度 PI / 4  30 度 PI / 6

学会进行转换

2 PI 刚好是一圈  一圈又是 360 度

2 PI 比上 360 度 = 弧度 比上 对应的角度

angle 角度  radian 弧度

function toAngle ( radian ) {   return radian * 180 / Math.PI;  }  function toRadian ( angle ) {   return angle * Math.PI / 180;  }

4. 角度的坐标  水平向右的角度是 0 度, 或 0 弧度  顺时针是正方向, 逆时针是负方向

练习: 绘制出, 圆心在 canva 正中心, 半径为 100, 角度从 -60度 到 120 度的圆弧

5. 如果没有当前位置, 绘制圆弧是没有任何问题  但是如果有了当前位置, 绘制圆弧的时候会将当前位置连接到圆弧上

6. 计算在圆弧上的点的坐标

7. 根据固定到起始点到 圆心, 结合圆弧和 closePath 方法可以绘制扇形( 楔形 Wedge)

8. 动态的通过动画, 一点一点的添加角度, 然后绘制一整个圆

9. 绘制文字  ctx.fillText( 文本内容, x, y )  ctx.strokeText( 文本内容, x, y );

常用的属性  ctx.font = ‘30px 黑体‘

ctx.textAlign  left, center, right. start, end  ctx.textBaseline top, middle, bottom. hanging, ideographics, alphabetic

ctx.measureText( 文本 )  获取当前文字的字体设置下, 文字的宽度对象

——————————————————————————————————————

1. 图片绘制  ctx.drawImage()  有三种调用形式  1> ctx.drawImage( img, x, y ) 将 image 绘制到 x, y 表示的位置  2> ctx.drawImage( img, x, y, width, height ) 将 img 绘制到一个矩形区域内  3> ctx.drawImage( img, sx, sy, sw, sh, x, y, w, h )   将图片 img 的 sx, sy, sw, sh 部分的内容绘制到画布的   x, y, w, h 的矩形区域内.

2. 计时器模型  var id = setInterval(function () {

if ( 条件 ) {

clearInterval( id );   }

// 继续执行我的内容

}, 20);

3. 变换的概念  计算机绘图是利用坐标进行绘图. 绘制任何图形都和坐标系的结构息息相关.

所谓的变换就是一套数学公式, 可以记录坐标轴的变化方式.  利用坐标轴的变换可以绘制出, 根据不同坐标轴特点而形成的图形.

基本的 api  ctx.translate()  平移变换  ctx.rotate()  旋转变换  ctx.scale()   伸缩变换

4. 封装绘图对象  Line  Rect  Circle x, y, radius, strokeStyle, fillStyle, lineWidth  Arc

function Line( config ) {

}  Line.prototype = {   stroke: function () {

}  }

5. canvas 的状态  在 Canvas 中凡是设置了属性效果, 都会延续到后面一次修改  Canvas 在创建出来的时候, 是有一个默认的状态的  我希望每次修改状态的时候 都是不影响原来默认状态的  每次画完图时, 我都会新建一个状态, 然后绘制完成后  恢复到原有状态

ctx.save()  将当前状态保存  ctx.restore()  将保存的状态恢复

状态栈

6. 在 canvas 绘制的时候允许使用 canvas 绘制 canvas    ctx.darwImage( img, ... )

此时 img 可以是 图片, 还可以是 canvas, 甚至是 video

7. Konva 是一个完全面向对象的框架  将所有的东西都看做是对象: 图片, 直线, 矩形, ...  将整个canvas看做成舞台(stage)  在舞台上放一个层, 那么将所有的图形放在这个层中

命名空间

var num = 123;  function foo() {}  // 污染全局作用域  var Itcast = {};

Itcast.num = 123;  Itcast.foo = function () {};

时间: 2024-11-25 11:33:32

canvas入门笔记的相关文章

MySQL入门笔记(一)

MySQL入门笔记(二) 一.数据类型 1. 整型 2. 浮点型 3. 字符型 4. 日期时间型 二.数据库操作 1. 创建库 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name; ??上述代码中DATABASE和SCHEMA完全相同,可任选一个(花括号内的参数为任选其一): ??添加IF NOT EXISTS的作用则是,若新建数据库的名称与已有数据库名称冲突,则产

Django入门笔记【一】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. 1. 查看Django是否安装及版本 1 $ python -c "import django; print(django.get_version())" 2. 创建一个项目(project) 通过cd方式进入自创目录,然后运行: 1 $ django-admin startprojec

嵌入式OS入门笔记-以RTX为案例:十.Keil的RTX调试支持

嵌入式OS入门笔记-以RTX为案例:十.Keil的RTX调试支持 调试(debug)是软件开发的一个重要环节,对于嵌入式开发而言这个环节其实比较依赖一些硬件资源(硬件debugger)的支持.传统的嵌入式系统的调试比较依赖断点(breakpoint)和单步调试(single step through).而 ARM cortex-M 系列的芯片其实有很强的CoreSight片上调试支持,实际上就是一个小的调试硬件,作为ARM的标准,内嵌在ARM的芯片里.在ARM自家的调试器ULINK-pro等的帮

Ajax 入门笔记

AJAX =Asynchronous Javascript + XML,是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. XMLHttpRequest 是 AJAX 的基础.XMLHttpRequest 用于在后台与服务器交换数据.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 1:创建 XMLHttpRequest 对象 为

html5 canvas 学习笔记(一)

一.canvas元素API canvas元素并未提供很多API,实际上他只提供了两个属性与三个方法: 1.canvas元素属性 width 属性:与 height 属性: canvas元素绘图表面的宽度,在默认状况下,浏览器会将canvas元素大小设定成与绘图表面大小一致,然而如果在css中覆写了元素大小,那么浏览器则会将绘图表面进行缩放,使之符合元素尺寸.其值为非负整数,默认值为300. 2.canvas元素方法 getContext()方法: 返回与该canvas元素相关的绘图环境对象,每个

iBatis 入门笔记

iBatis简介 iBatis是一个"半自动"的轻量级O/R Mapping框架. O/R Mapping是指对象与数据库之间的映射,而iBatis就是这样一个映射器,映射器的主要作用是在对象和数据库之间搬运数据,同时保证对象.数据库和映射器之间相互独立. 通过O/R Mapping你将不用再面对那一堆令人厌恶的JDBC代码,为一堆打开连接.关闭连接的代码而眼花头昏. 何为"半自动"?    这里的半自动是与Hibernate这样的O/R Mapping方案对比得出

Hive入门笔记-----架构以及应用介绍

Hive这个框架在Hadoop的生态体系结构中占有及其重要的地位,在实际的业务当中用的也非常多,可以说Hadoop之所以这么流行在很大程度上是因为Hive的存在.那么Hive究竟是什么,为什么在Hadoop家族中占有这么重要的地位,本篇文章将围绕Hive的体系结构(架构).Hive的操作.Hive与Hbase的区别等对Hive进行全方面的阐述. 在此之前,先给大家介绍一个业务场景,让大家感受一下为什么Hive如此的受欢迎: 业务描述:统计业务表consumer.txt中北京的客户有多少位?下面是

JAVA数据库编程(JDBC技术)-入门笔记

本菜鸟才介入Java,我现在不急着去看那些基本的语法或者一些Java里面的版本的特征或者是一些晋级的知识,因为有一点.Net的OOP编程思想,所以对于Java的这些语法以及什么的在用到的时候在去发现学习一下.我现在很迫不及待用JAVA想来实现以下对数据库的增删改查.想实现就来看Java是怎么操作数据库的,回想下.Net里你可能会配置web.Config,或者你去写一些DBhelper类然后调用里面的自己定义的一些增删改查的方法,更或者你去配一些数据控件等等往往发现操作基本都是一体化的简单.现在面

Django入门笔记【三】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. Public interface - views. 1. 定义 视图(View)是Django应用中用于实现某一特定功能的Web页面.比如,一个博客可以有博客展示页面,博客创建页面,评论页面. 2. 视图示例 写入代码 1 #polls/views.py 2 3 from django.http