HTML5-Canvas 图形变换+状态保存
1. 图形变换
canvas是基于状态绘制图形的。故此一般情况下,canvas的绘制的图形路径和状态时分离的。
function drawShape(ctx){
// 绘制路径
shapePath(ctx);
// 进行填充或者绘制
// ...
}
function shapePath(ctx){
ctx.beginPath();
// 图形路径
// ...
ctx.closePath();
}
在填充或绘制之前可以调用一些状态或者图形变换的来设置当前绘制图形的状态。
这里所说的图形变换大致指的就是:
1> 位移 translate(x,y) : 将canvas画布进行位移显示。将坐标原点移动到(x,y)的位置,translate将原点移动之后,如果再次调用translate进行移动,那么会依照上一个translate移动之后作为原点参考。
2> 旋转 rotate(deg) : 将canvas画布进行旋转显示
3> 缩放 scale(sx,sy) : 将canvas画布进行缩放显示
2.canvas状态的保存和恢复
save()函数:保存当前的图形状态
restore()函数:返回save()函数保存时候的状态
function drawShape(ctx){
ctx.save(); // 状态保存
// 绘制路径
shapePath(ctx);
// 进行填充或者绘制
// ...
ctx.restore(); // 状态恢复
}
function shapePath(ctx){
ctx.beginPath();
// 图形路径
// ...
ctx.closePath();
}


3. 变换矩阵

transform(a,b,c,d,e,f)状态会叠加。

setTransform(a,b,c,d,e,f)将变换矩阵首先变成单位矩阵,然后在对传入的参数进行图形变换,会忽略之前所有的transform操作。


HTML5-Canvas 图形变换+状态保存的更多相关文章
- HTML5 Canvas ( 图形变换, 升级版的星空 ) translate, rotate, scale
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- [js高手之路] html5 canvas系列教程 - 状态详解(save与restore)
本文内容与路径([js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解)是canvas中比较重要的概念.掌握理解他们是做出复杂canvas动 ...
- HTML5之图形变换
- Transformations scale(0.5,0.5) 缩放 rotate(0.175) 旋转 translate(100,50) 位移 - 代码结构 context.scale(x, y) ...
- HTML5 Canvas ( 图形的透明度和遮盖 ) globalAlpha, globalCompositeOperation
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- HTML5 Canvas ( 图形变换矩阵 ) transform, setTransform
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Canvas 总结,到第4章 canvas图形变换
canvas 必须认识到的大坑 <!-- 重点: 在js/canvas标签中定义的宽和高是画布实际的宽和高. 在样式表中定义的宽和高是画布缩放后的宽和高. 即:把js/canvas实际大小缩放到 ...
- html5 canvas缩放变换
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- HTML5 Canvas ( 图形的像素操作 ) getImageData, putImageData, ImgData.data
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- HTML5 Canvas ( 图形的阴影 ) shadowColor, shadowOffsetX, shadowOffsetY, shadowNlur
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
随机推荐
- Quartz是一个完全由java编写的开源作业调度框架
http://www.quartz-scheduler.org/ 找个时间研究一下
- 机器学习技法之Aggregation方法总结:Blending、Learning(Bagging、AdaBoost、Decision Tree)及其aggregation of aggregation
本文主要基于台大林轩田老师的机器学习技法课程中关于使用融合(aggregation)方法获得更好性能的g的一个总结.包含从静态的融合方法blending(已经有了一堆的g,通过uniform:voti ...
- ios - UILabel全属性
label是大家在开发过程中使用频率很高的一个用来显示文本信息的控件,但是她所有的属性你都了解吗,下面让我们来 重新认识一下label! 1.创建 CGRect rect = CGRectMake(, ...
- GIS-ArcGIS 与 ThreeJs交互联动
一.从GIS触发Three场景 MapFeatureLayer.on("click", function (evt) { graphicsLayerOfMouse.clear(); ...
- Nginx 链接
Nginx反向代理以及负载均衡配置:http://www.cnblogs.com/Miss-mickey/p/6734831.html
- thinkphp nginx+phpcgj安装配置
环境:mysql-5.6.26 nginx-1.9.4.tar.gz php-5.6.13 程序框架ThinkPHP 客户要求必须使用nginx + php 1.首先安装n ...
- [转载]SQL truncate 、delete与drop区别
相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交. 不同点: 1. t ...
- PyQt4开关按钮ToggleButton
PyQt4没有开关按钮部件.但是我们可以使用在特殊状态下的QPushButton部件来创建开关按钮.而所谓的开关按钮就是一个具有按下和未按下两种状态的普通赶牛.用户可以通过单击按钮来切换其开或者关的状 ...
- Computer Science Theory for the Information Age-5: 学习理论——VC维的定义以及一些例子
学习理论——VC维的定义以及一些例子 本文主要介绍一些学习理论上的东西.首先,我们得明确,从训练集上学习出来的分类器的最终目标是用于预测未知的样本,那么我们在训练的时候该用多少的样本才能使产生的分类器 ...
- delphi中Case语法的使用方法
Case 语句If...Then…Else 语句适合选项较少的情况,如果有很多选项的话利用If 语句就比较麻烦,在这种情况下,Case 语句就容易多了.Case 语句的语法如下: case <表 ...