所有分类
  • 所有分类
  • 后端开发
了解变形前必知:Canvas 状态的保存与恢复方法

了解变形前必知:Canvas 状态的保存与恢复方法

在了解变形之前,我先介绍一下两个在你开始绘制复杂图形就必不可少的方法。的状态就是当前画面应用的所有样式和变形的一个快照。我创建了一个drawSpirograph方法用来绘制螺旋(spirograph)图案,那是围绕原点绘制出来的。方法中手工

save()
restore()

你可能会觉得“Canvas存储恢复”这词儿有点深奥?其实就是在作画过程中,提前把画面保存到电脑里头,需要的时候再翻出来看。比如说打游戏的时候,暂停后随时可以回放,多方便!

Canvas状态是什么?

Canvas状态就好比是你画板上涂抹的那一堆东西,比如选什么颜色,用多大的力气画线,有没有歪曲之类的。总之这上面全是你创作时留下的痕迹,这些都可以算是Canvas状态。而且这个状态还挺重要的喔,只要你稍微动动手指调整下,画出的画面可能就大大不同!

canvas,它的状态是靠堆栈存起来的。就像拍照那样,你用了save这个方法,就把现在的样子保存下来放到堆栈去。不管往后咋样变化,你都能找到那张最开始的“老照片”!

save和restore怎么用?

了解变形前必知:Canvas 状态的保存与恢复方法

Canvas里头有俩好用的快捷键——save和restore!它们就是专门用来保存在画布上搞定了的事儿和恢复之前的操作滴。就跟玩儿游戏存档&读档似的方便。每次画新作之前,别急着动笔,先save一把,这样就算画歪了或者想换效果也能回退。

这操作真的很简单!你在那边随便点几下,啥复杂的参数也不用操心。比如说,你随手画了一个大正方形,觉得不错的话就赶紧保存!以后想换成小正方形?还是想回归大正方形?那简单,你只需要恢复一下刚才的设置就好了,之前所有的调整都能回来!

状态堆栈的工作原理

Canvas的状态就是这么保存的:只要save一下,堆里的状态就会往上移;恢复的时候,原来在顶部的那部分状态又会重新出现所以之前设过的东西都会回来。

你知道吗,比如你画了很多图,保存下来。想回顾的话直接找到这个图的存档不就行了么?这样无论面对什么复杂图案,都能快速回到最初状态,超方便的技巧!

function draw() {  
     var ctx = document.getElementById('canvas').getContext('2d');  
      
     ctx.fillRect(0,0,150,150);   // Draw a rectangle with default settings  
     ctx.save();                  // Save the default state  
      
     ctx.fillStyle = '#09F'       // Make changes to the settings  
     ctx.fillRect(15,15,120,120); // Draw a rectangle with new settings  
      
     ctx.save();                  // Save the current state  
     ctx.fillStyle = '#FFF'       // Make changes to the settings  
     ctx.globalAlpha = 0.5;      
     ctx.fillRect(30,30,90,90);   // Draw a rectangle with new settings  
     
     ctx.restore();               // Restore previous state  
     ctx.fillRect(45,45,60,60);   // Draw a rectangle with restored settings  
     
     ctx.restore();               // Restore original state  
     ctx.fillRect(60,60,30,30);   // Draw a rectangle with restored settings  
 }

restore的实际应用

translate(x, y)
translate

这个叫“还原”的功能真的好厉害,我用了觉得很爽,尤其是画很多图形之后,自己调的话会累死人的!

了解变形前必知:Canvas 状态的保存与恢复方法

用restore功能就安心!画完图随手按个恢复就能立刻变回原样~这样下来,代码整洁,绘图也更随心所欲。

save和restore的组合使用

剪贴板就像个备忘录,帮你随意存档。下次开始画新图或者修改设置前,记得保存原版,如有需要再恢复回来。这样的话,哪改了,改成啥样儿,就一目了然!

比如说,你画了张很麻烦的图,然后改动了好多次设定,也没能记住以前的样子,最后画出来的东西乱七八糟。但是如果有保留历史记录和恢复功能,每次改变都会有提示,画出的作品也能够接近你想要的样子!

了解变形前必知:Canvas 状态的保存与恢复方法

translate的作用

你可别忘了translate这个方法其实就是给Canvas里的图形搬家用的。想把图形放在随意位置?调坐标太麻烦,交个translate就能轻松解决!

function draw() {  
      var ctx = document.getElementById('canvas').getContext('2d');  
      ctx.fillRect(0,0,300,300);  
      for (var i=0;i<3;i++) {  
        for (var j=0;j20000) break;  
       var x2 = (R+r)*Math.cos(i*Math.PI/72) - (r+O)*Math.cos(((R+r)/r)*(i*Math.PI/72))  
       var y2 = (R+r)*Math.sin(i*Math.PI/72) - (r+O)*Math.sin(((R+r)/r)*(i*Math.PI/72))  
       ctx.lineTo(x2,y2);  
       x1 = x2;  
       y1 = y2;  
       i++;  
     } while (x2 != R-O && y2 != 0 );  
     ctx.stroke();  
  }

想在画布左上角画图?忘了坐标,直接用translate拖动图案过去就行!这么做简单又方便,画画更酷炫!

rotate(angle)

scale的魔力

“Scale”这玩意儿你懂吗?直接用来缩放图形很方便,比如如果小星星不够亮,可以试试调大一点,瞬间变身超大星星!

了解变形前必知:Canvas 状态的保存与恢复方法

框形放大真的超赞!只要设置一个缩放比即可。譬如想让图像变大两倍,只需输个scale(2,2)。这样一来,每一角都能放大两个像素,整图立马就大了起来。

变形矩阵的秘密

了解变形前必知:Canvas 状态的保存与恢复方法

晕乎了吗?别怕,变形矩阵就是Canvas里的小黑板,记录所有变形动作。用translate(移动)、scale(变大变小)或者rotate(转圈)使点劲儿,这个哥哥就要重整队伍!

改变这个矩阵就能画出各种好玩儿的图案了!像左边稍微斜一点儿的话,只需要轻轻调整一下矩阵就好!这样子做出来的图不光好看还很有个性!

 function draw() {  
      var ctx = document.getElementById('canvas').getContext('2d');  
      ctx.translate(75,75);  
      
      for (var i=1;i<6;i++){ // Loop through rings (from inside to out)  
        ctx.save();  
        ctx.fillStyle = 'rgb('+(51*i)+','+(255-51*i)+',255)';  
      
        for (var j=0;j<i*6;j++){ // drawindividual dots  
         ctx.rotate(Math.PI*2/(i*6));  
         ctx.beginPath();  
         ctx.arc(0,i*12.5,5,0,Math.PI*2,true);  
         ctx.fill();  
       }       
       ctx.restore();  
     }  
  }

实践中的Canvas状态管理

scale(x, y)

绘画时候,要把Canvas的状态保护好。记住找准存取画布的时机,别让瞎搞破坏画风!

就比如你画个大作,过程中改来改去,不小心搞定一地鸡毛。但如果你备份了再恢复改动的话,那一切都井然有序,最后出炉的作品肯定也更可爱。

小结:让Canvas成为你的画布

Canvas的存档&恢复功能就是让你随心所欲地涂鸦!画累了就停下来歇歇,回头看看之前的成果感觉更好玩儿了

了解变形前必知:Canvas 状态的保存与恢复方法

Canvas保存和恢复的事儿,是啥意思你知道吗?是不是觉得有时候Canvas也能让我们随心涂抹?那就赶紧动手试试看,Canvas就是我们大展身手的地方,可以画出各种奇妙的想法!

原文链接:https://www.icz.com/technicalinformation/web/vue2/2024/06/18505.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?