canvas的translate、scale、rotate等方法
来源:互联网 发布:怎么把微店搬到淘宝 编辑:程序博客网 时间:2024/05/22 10:58
From:http://blog.csdn.net/fengyee_zju/article/details/16994099
2.scale(x,y):扩大。x为水平方向的放大倍数,y为竖直方向的放大倍数。
3.rotate(angel):旋转.angle指旋转的角度,顺时针旋转。
4.transform():切变。所谓切变,其实就是把图像的顶部或底部推到一边。
第一条很好理解,就是要明确顺序。
canvas的转换不是针对整个canvas的,而是针对调用转换方法之后绘制的shapes或 paths。如下:
context.rotate(45 * Math.PI/180);
context.fillRect(50, 50, 50, 50);
顺序很重要,反了就没有旋转的效果了。
第二条,转换的时候,需要把转换的中心点移到shape的自身的中心,不然的话,请看下面这个例子(浅蓝色部分表示canvas):
context.fillRect(50, 50, 50, 50);
这是没有转换的效果,接着来看旋转45°的效果:
context.rotate(45 * Math.PI/180);
context.fillRect(50, 50, 50, 50);
可以看出,旋转的中心是canvas的左上角(scale()的中心也是左上角),也就是点(0,0),但是通常我们需要的是围绕自己的中心进行旋转,所以就有了第二条。
==========================================================================================
下面说说怎么移动中心点。
假如fillRect(50, 50, 50, 50),那么这个矩形的中心点是(x + width/2, y +height/2),即(75, 75)。
上面刚说了,旋转的中心是canvas的左上角,我们要做的就是把(0, 0)移到(75, 75)的位置。
canvas的translate()方法可以使坐标系统的原点向上下左右移动。这正是我们需要的!
context.translate(x + width/2, y +height/2);
好了,中心点处理完了,还记得上面的第一条不,切记顺序,现在该画矩形了,fillRect()的参数 x 和 y现在是什么呢?
调用translate()之后,整个坐标系统都平移了,所以我们之前的fillRect(50, 50, 50,50),矩形的左上角不再是(50, 50)了,而是(-0.5 * width, -0.5 * height);
context.fillRect(-0.5 * width, -0.5 *height);
==========================================================================================
再说下scale(),如果我们需要放大1倍,即 scale(2, 2);刚才也说了,缩放的中心点默认也是canvas的左上角,所以我们还是要进行坐标平移:
context.translate(x + width/2, y +height/2);
context.scale(2, 2);
接着画矩形,这里很容易出现幻觉,好像要画一个放大1倍后的矩形,其实不用的,该怎么画还是怎么画:
context.fillRect(50, 50, 50, 50);
例子:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<input type="button"onClick="ready()">
</body>
</html>
- canvas的translate、scale、rotate等方法
- canvas的translate、scale、rotate等方法
- canvas的translate、scale、rotate等方法
- canvas的translate、scale、rotate、clipRect等方法
- Canvas translate,scale,rotate
- Canvas之translate、scale、rotate、skew方法讲解!
- Canvas进阶之translate、scale、rotate、skew方法讲解!
- Canvas之translate、scale、rotate、skew方法讲解!
- Canvas之translate、scale、rotate、skew方法讲解!
- Canvas之translate、scale、rotate、skew方法讲解!
- Canvas之translate、scale、rotate、skew
- html5的canvas对象的translate方法和rotate方法
- canvas星空使用translate和rotate和scale
- Android Canvas rotate()和translate()两个方法的研究
- Android Canvas rotate()和translate()两个方法的研究
- Translate、Scale、Alpha、Rotate
- translate、scale、alpha、rotate
- 两种不同的方法使用不当Animation 四个动画效果Alpha.Scale.Rotate.Translate
- Oracle 高效分页存储过程实例 含javademo
- 浅谈android中的对话框
- 从内存管理、内存泄漏、内存回收探讨C++内存管理
- uva 10831 - Gerg's Cake(勒让德记号)
- wiki 方格取数2 网络流 最大流最小费用流
- canvas的translate、scale、rotate等方法
- iOS读取通讯录功能
- uva 10555 - Dead Fraction)(数论)
- 防止非法登录的模块(用过滤器过滤相应的文件夹)
- 委托,事件和反射
- linux下Oracle数据库实例开机自启动设置
- poj3417 Network 离线LCA + 树形dp
- 适配器模式,Adapter
- canvas.translate(x,y)一点新的认识