美文网首页
Canvas学习笔记之变形

Canvas学习笔记之变形

作者: __damon__ | 来源:发表于2017-03-17 23:00 被阅读0次

Canvas 学习笔记之变形 -- by Damon

状态保存和恢复

ctx.save()
ctx.restore()

状态包括:

  • 当前的移动、旋转、缩放
  • strokeStyle, fillStyle, globalAlpha, lineWidth, lineCap, lineJoin, miterLimit, shadowOffsetX, shadowOffsetY, shadowBlur, shadowColor, globalCompositeOperation 的值
  • 当前的裁切路径(cliping path)

状态栈:
每次调用save就是入栈操作,restore就是出栈操作

ctx.translate(x, y)
ctx.rotate(ratio)
ctx.scale(x, y)
ctx.setTransform(m11, m12, m21, m22, dx, dy)
ctx.resetTransform() // == ctx.setTransform(1, 0, 0, 1, 0, 0)

m11: 水平方向的缩放
m12: 水平方向的偏移
m21: 竖直方向的偏移
m22: 竖直方向的缩放
dx: 水平方向的移动
dy: 竖直方向的移动

常用方法
变换前先save一下状态,然后变形,画完后重置

Paste_Image.png
window.onload = function() {

  translate();
  rotating();
  scale();
};

// 1
function translate() {

  var cvs = document.getElementById('my-canvas-1');
  var ctx = cvs.getContext('2d');
  cvs.height = 300;
  cvs.width = 300;

  ctx.fillRect(0, 0, 300, 300);
  for (var i = 0; i < 3; i++) {
    for (var j = 0; j < 3; j++) {
      ctx.save();
      ctx.strokeStyle = '#9CFF00';
      ctx.translate(50 + j * 100, 50 + i * 100);
      ctx.beginPath();
      ctx.arc(0, 0, 20, 0, Math.PI * 2);
      ctx.closePath();
      ctx.stroke();
      ctx.restore();
    }
  }
}
// 2
function rotating() {

  var cvs = document.getElementById('my-canvas-2');
  var ctx = cvs.getContext('2d');
  cvs.height = 300;
  cvs.width = 300;

  ctx.translate(150, 150);
  for (var i = 1; i < 7; i++) {
    for (var j = 0; j < i * 6; j++) {
      ctx.save();
      ctx.fillStyle = '#F0F';
      ctx.rotate(2 * Math.PI / 6 / i * j);
      ctx.beginPath();
      ctx.arc(20 * i, 0, 4, 0, Math.PI * 2);
      ctx.closePath();
      ctx.fill();
      ctx.restore();
    }
  }
}
// 3
function scale() {

  var cvs = document.getElementById('my-canvas-3');
  var ctx = cvs.getContext('2d');
  cvs.height = 300;
  cvs.width = 300;

  ctx.translate(150, 150);
  for (var i = 1; i < 7; i++) {
    for (var j = 0; j < i * 6; j++) {
      ctx.save();
      ctx.scale(1 + i / 10, 1 + i / 10);
      ctx.fillStyle = '#F0F';
      ctx.rotate(2 * Math.PI / 6 / i * j);
      ctx.beginPath();
      ctx.arc(20 * i, 0, 4, 0, Math.PI * 2);
      ctx.closePath();
      ctx.fill();
      ctx.restore();
    }
  }
}
// 4
function transform() {
  var cvs = document.getElementById('my-canvas-2');
  var ctx = cvs.getContext('2d');
  cvs.height = 300;
  cvs.width = 300;

  ctx.translate(150, 150);
  for (var i = 1; i < 7; i++) {
    for (var j = 0; j < i * 6; j++) {
      ctx.save();
      ctx.fillStyle = '#F0F';
      ctx.rotate(2 * Math.PI / 6 / i * j);
      ctx.beginPath();
      ctx.arc(20 * i, 0, 4, 0, Math.PI * 2);
      ctx.closePath();
      ctx.fill();
      ctx.restore();
    }
  }
}

代码地址
Demo地址

相关文章

  • Canvas学习笔记之变形

    Canvas 学习笔记之变形 -- by Damon 状态保存和恢复 状态包括: 当前的移动、旋转、缩放 stro...

  • Canvas学习笔记之像素

    Canvas 学习笔记之像素操作 -- by Damon 像素操作 ImageData 对象width: Numb...

  • Canvas学习笔记之动画

    Canvas 学习笔记之动画 -- by Damon 动画的基本步骤 清空 保存状态 绘制图形(animated ...

  • canvas入门

    日期:2020 年 5 月 8 日 canvas 学习笔记 canvas 简介 canvas 是一个用来绘图的 h...

  • 3.canvas动画

    动画的基本步骤 清空canvas 保存canvas状态如果会改变 canvas 状态的设置(样式,变形之类的),又...

  • Canvas学习笔记之色彩

    canvas 学习笔记 -- by Damon colors line styles gradient patte...

  • Canvas学习笔记之图像处理

    Canvas 学习笔记 -- by Damon canvas对于图像的操作能力 功能:动态的图像合成、图形的背景、...

  • Canvas学习笔记之形状

    canvas学习笔记--by Damon 基础用法 默认宽高300x150 标签 渲染上下文 绘制形状 矩形 re...

  • canvas开发项目总结

    canvas绘图 对canvas设置宽高,只能通过属性设置。使用css设置宽高会让canvas变形 开发手机端页面...

  • canvas之变形

    一、状态的保存和恢复 在了解变形之前,先介绍两个在绘制复杂图形时必不可少的方法。 save()restore()s...

网友评论

      本文标题:Canvas学习笔记之变形

      本文链接:https://www.haomeiwen.com/subject/yiiynttx.html