原文地址:http://www.cnblogs.com/LittleBai/p/5989949.html
1.保存和恢复绘图状态:
在绘制图形时,难免会重复使用某个样式,甚至有时会在不同颜色之间来回切换。
那么为了减少代码冗余,我们可以调用画布中的save()方法,来帮我们
保存一些样式和属性,这样我们就可以再通过调用restore() 方法,来再次使用这些我们曾保存好的样式和属性了!
下面看下具体代码:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>保存和恢复绘图状态</title> <script type="text/javascript"> window.onload = function () { //保存绘图状态 save var canvas = document.getElementById("myCanvas"); var context = canvas.getContext("2d"); context.fillStyle = "rgb(255,0,0)"; context.save(); //保存状态 context.fillRect(50, 50, 100, 100); //初始定义,绘制红色矩形 //恢复绘图状态 restore context.fillStyle = "rgb(0,255,0)"; context.fillRect(200, 50, 100, 100); //绘制绿色矩形 context.restore(); //恢复画布状态 context.fillRect(350, 50, 100, 100); //恢复到初始定义,绘制红色矩形 } </script> </head> <body> <canvas id="myCanvas" width="1000" height="1000"> 您的浏览器暂不支持画布! </canvas> </body> </html>
2.保存和恢复多个绘图状态:
多个绘图状态是如何保存的呢?
我们可以这么理解:有台复印机在大量的复印资料,最先复印的肯定是在最下层的,后来的一张张的累在上面,然后堆成一摞儿,
最上面的那份肯定是最后一次的复印操作,这个毋庸置疑!
保存状态其实就类似复印机的工作状态,最近保存的在最上层!
来看下代码怎么实现:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>保存和恢复绘图状态</title> <script type="text/javascript"> window.onload = function () { //保存绘图状态 save var canvas = document.getElementById("myCanvas"); var context = canvas.getContext("2d"); context.fillStyle = "rgb(255,0,0)"; context.save(); context.fillRect(50, 200, 100, 100); //第一个保存状态,绘制红色矩形 context.fillStyle = "rgb(0,0,255)"; context.save(); context.fillRect(200, 200, 100, 100); //第二个保存状态,绘制蓝色矩形 context.restore(); context.fillRect(350, 200, 100, 100); //恢复蓝色矩形的保存状态,因为它是最后的保存状态,所以它最先恢复。 context.restore(); context.fillRect(500, 200, 100, 100); //恢复红色矩形的保存状态。 } </script> </head> <body> <canvas id="myCanvas" width="1000" height="1000"> 您的浏览器暂不支持画布! </canvas> </body> </html>
相关推荐
在复杂的绘图过程中,有时我们需要保存和恢复Canvas的状态,以便于管理不同的绘图操作。这个功能在处理交互式图形或者多层图形时尤其有用。在李东博的《HTML5+CSS3从入门到精通》一书中,提到了一个关于HTML5保存与...
默认情况下,Canvas的坐标原点位于视图左上角,但可以通过`save()`和`restore()`方法保存和恢复状态,改变旋转的基点。 ```java canvas.save(); canvas.rotate(angle, pivotX, pivotY); // 在此之后的绘制都会受到...
// 保存当前状态 ctx.translate(canvas.width / 2, canvas.height / 2); // 将坐标轴移动到中心 ctx.rotate(angle * Math.PI / 180); // 旋转角度 ctx.drawImage(img, -img.width / 2, -img.height / 2, img.width,...
`canvas.restore()`方法的作用是恢复`Canvas`到之前保存的状态。它与`save()`成对使用,确保在完成一组绘图操作后,`Canvas`可以回到调用`save()`时的状态。通常,`restore()`应该与最近的未匹配的`save()`配对使用...
// 恢复之前保存的状态 requestAnimationFrame(animate); } animate(); ``` 这里的`textWidth`和`textHeight`分别代表文本的宽度和高度,它们可以通过`context.measureText()`计算得出。这个例子中,文本会在每一...
// 保存当前状态(以便恢复) ctx.translate(centerX, centerY); // 移动到中心点 ctx.rotate(angle * Math.PI / 180); // 旋转指定角度 ctx.scale(-1, 1); // 沿x轴翻转(模拟反射) // 绘制图像的一部分 ...
在Canvas中,我们可以使用`save()`和`restore()`方法来保存和恢复当前的绘图状态,`translate()`、`rotate()`和`scale()`方法则可以对坐标系进行平移、旋转和缩放。开发者通过不断调整这些变换,模拟出物体的3D旋转...
在进行旋转操作前,通常需要先保存当前状态(`save()`),旋转后再恢复(`restore()`),以防止后续操作受到影响。 6. 文件压缩: 裁剪、缩放、滤镜等处理后,可以使用`toDataURL()`方法将Canvas内容转换为数据URL...
例如,如果你需要在一个已有的图像上添加一些动态元素,可以先保存当前的绘图状态,然后进行动态元素的绘制,最后再恢复状态,这样动态元素就不会影响到原始图像。 下面是一个简单的示例代码,演示了如何使用`save...
// 恢复状态,取消平移 canvas.restore(); // 绘制另一个未被平移的矩形 canvas.drawRect(150, 150, 250, 250, paint); } ``` 在这个例子中,第一个矩形会被平移,而第二个矩形则保持在原位置,因为我们在绘制...
5. 完成绘制后,恢复之前保存的绘图状态,以保持后续绘图不受影响。这通过`context.restore()`完成。 在实际应用中,我们可能还需要处理动画效果,比如让图形持续旋转。这可以通过定时器(如`setInterval()`)和...
6. 调用canvas.restore()恢复之前保存的绘图状态,确保后续的绘制不受当前变换的影响。 7. 最后,调用invalidate()方法来触发重绘。 五、代码示例 下面是一个简单的示例,展示如何使用Canvas进行平移和缩放操作: `...
- `restore()`:恢复到之前保存的绘图状态。 5. **橡皮擦功能**: - 可以通过设置`ctx.globalCompositeOperation`属性为`'destination-out'`,模拟橡皮擦效果,即将新的绘图与原有图像相减。 6. **改变笔触大小...
另外,为了提高性能,可以考虑使用剪裁区域(`clip` 方法)或者保存/恢复状态(`save` 和 `restore` 方法)来避免不必要的重绘。如果视图树非常大,还可以采用分层渲染策略,只绘制可见部分或使用虚拟DOM技术优化。 ...
6. **保存与恢复状态**:为了方便比较和测试,ec-devtools提供了保存和恢复canvas状态的功能,避免了反复修改和刷新页面。 在JavaScript开发中,特别是涉及图片展示和处理的应用,canvas是常见且重要的技术。ec-...
在本文中,我们将探讨如何使用Canvas实现图片的标记、缩放、移动以及保存历史状态的功能,这对于在线教育、文档批注等应用场景非常实用。 首先,让我们来看看如何在Canvas上标记图片。这通常涉及到监听用户的鼠标...
- `restore()`:恢复之前保存的绘图状态。 现在,结合以上知识点,我们可以在鼠标移动时动态改变直线的旋转角度。在`handleMouseMove`函数中,我们可以计算出鼠标的旋转角度,并应用到直线的绘制上。例如: ```...
首先,我们需要保存当前的Canvas状态,然后设置旋转中心点,接着旋转Canvas,最后绘制子视图。别忘了在绘制结束后恢复Canvas的状态。 ```java @Override protected void onDraw(Canvas canvas) { super.onDraw...
比如,避免不必要的重绘,通过保存和恢复状态来减少渲染上下文的操作,以及利用硬件加速等。在处理大量粒子时,合理的数据结构和算法选择也是关键。 总的来说,“canvas粒子球”是一个很好的HTML5 Canvas实践案例,...