canvas图形移动,缩放,旋转 - Kaiqisan

图形移动,缩放,旋转

这里的操作和css里面的这些操作有一些不同之处

关键代码

translate(x,y): 这个操作试图移动画布的坐标轴,它和css的transform:translate(x, y)的移动方向是一样的,都是以右为横向移动正方向,以下为纵向移动正方向。

下图可以更好地理解这个坐标轴的意思

translete
上图将指令应为

ctx.translate(x1, y1)

将坐标轴向左移动x1,向下移动y1

移动坐标轴轴可以在某些绘制中能够减少许多不必要的计算。

rotate(angle): 旋转坐标轴,以坐标轴的原点为轴旋转,正数为顺时针,负数为逆时针,使用弧度制,可以和上面的translate平移坐标轴一起配合使用,再加上for循环可以有奇效,具体要画什么,就要发挥大伙们的想象力了。

rotate
上图中②到③顺时针旋转了大约三十度。

scale(x, y): 试图在横纵两个方向拉伸画布(以坐标原点为基础),横向拉伸x倍,纵向拉伸y倍。它就是缩放功能,但是能够做到横纵不同比例的缩放。

scale
在左图中,没有进行缩放,实际画布区域和绘制画布区域是一样的,放大之后,绘制画布区域放大两倍,实际画布区域不变,变大之后绘制的图片虽然可能还在绘制画布区域,但是可能因为超出实际画布区域而已经无法显示。上图为横纵都放大两倍之后的结果。

保存状态

接上:

由于该设置是全局生效的,会影响到后面的绘图,如果只是想一时地改变整个画布的状态的话可以使用下面的指令

ctx.save()
............. // 一些代码
ctx.restore()

第一行可以保存你当前画布的所有的状态并把此次状态入栈,第二行指令就是出栈,弹出上一个状态,如果出栈后栈空了,当前状态就是画布默认的状态。有了这个方法,就可以不用再手动恢复状态了。

/* 这样很麻烦 */
ctx.scale(2, 0.5)
............. // 一些代码
ctx.scale(0.5, 2)

总结

今天的操作实际上是对整块画布进行操作,从而实现整体上的改变,。这次引入了两个概念,一个是显示画布,一个是实际画布(我自己定义的概念),实际画布在一开始和显示画布是重合的,在各种画布变换中,产生变动的是实际画布,它的变动影响接下来的图像绘制,如果没有掌握好一个度的话或许有些内容在实际画布里,但它并不显示在显示画布(除非你一开始就想要这样),这样的变换可以在绘制某些特殊图形的时候会更加方便,或许可以减少代码量和运算量。但使用完成之后不想使画布转换之后记得回退。ctx.restore().

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kaiqisan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值