`

canvas 保存、恢复状态(转)

阅读更多

原文地址: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>
 

 

分享到:
评论

相关推荐

    HTML5保存与恢复canvas状态案例.pdf

    在复杂的绘图过程中,有时我们需要保存和恢复Canvas的状态,以便于管理不同的绘图操作。这个功能在处理交互式图形或者多层图形时尤其有用。在李东博的《HTML5+CSS3从入门到精通》一书中,提到了一个关于HTML5保存与...

    使用canvas画线,位移,旋转,绘制五角星。

    默认情况下,Canvas的坐标原点位于视图左上角,但可以通过`save()`和`restore()`方法保存和恢复状态,改变旋转的基点。 ```java canvas.save(); canvas.rotate(angle, pivotX, pivotY); // 在此之后的绘制都会受到...

    使用HTML5 canvas 标签进行图片裁剪、旋转、缩放示例代码

    // 保存当前状态 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,...

    Android canvas.save()和canvas.restore()的理解

    `canvas.restore()`方法的作用是恢复`Canvas`到之前保存的状态。它与`save()`成对使用,确保在完成一组绘图操作后,`Canvas`可以回到调用`save()`时的状态。通常,`restore()`应该与最近的未匹配的`save()`配对使用...

    HTML5 Canvas旋转文本动画

    // 恢复之前保存的状态 requestAnimationFrame(animate); } animate(); ``` 这里的`textWidth`和`textHeight`分别代表文本的宽度和高度,它们可以通过`context.measureText()`计算得出。这个例子中,文本会在每一...

    canvas制作旋转的万花筒

    // 保存当前状态(以便恢复) ctx.translate(centerX, centerY); // 移动到中心点 ctx.rotate(angle * Math.PI / 180); // 旋转指定角度 ctx.scale(-1, 1); // 沿x轴翻转(模拟反射) // 绘制图像的一部分 ...

    HTML5 Canvas实现3D旋转物体动画及模糊发光特效源码

    在Canvas中,我们可以使用`save()`和`restore()`方法来保存和恢复当前的绘图状态,`translate()`、`rotate()`和`scale()`方法则可以对坐标系进行平移、旋转和缩放。开发者通过不断调整这些变换,模拟出物体的3D旋转...

    canvas图像裁剪压缩旋转

    在进行旋转操作前,通常需要先保存当前状态(`save()`),旋转后再恢复(`restore()`),以防止后续操作受到影响。 6. 文件压缩: 裁剪、缩放、滤镜等处理后,可以使用`toDataURL()`方法将Canvas内容转换为数据URL...

    android中canvas的save和restore用法

    例如,如果你需要在一个已有的图像上添加一些动态元素,可以先保存当前的绘图状态,然后进行动态元素的绘制,最后再恢复状态,这样动态元素就不会影响到原始图像。 下面是一个简单的示例代码,演示了如何使用`save...

    android 中canvas的save和resotre用法

    // 恢复状态,取消平移 canvas.restore(); // 绘制另一个未被平移的矩形 canvas.drawRect(150, 150, 250, 250, paint); } ``` 在这个例子中,第一个矩形会被平移,而第二个矩形则保持在原位置,因为我们在绘制...

    canvas围绕旋转

    5. 完成绘制后,恢复之前保存的绘图状态,以保持后续绘图不受影响。这通过`context.restore()`完成。 在实际应用中,我们可能还需要处理动画效果,比如让图形持续旋转。这可以通过定时器(如`setInterval()`)和...

    安卓绘图 canvas 绘图 平移缩放

    6. 调用canvas.restore()恢复之前保存的绘图状态,确保后续的绘制不受当前变换的影响。 7. 最后,调用invalidate()方法来触发重绘。 五、代码示例 下面是一个简单的示例,展示如何使用Canvas进行平移和缩放操作: `...

    canvas实现涂鸦效果

    - `restore()`:恢复到之前保存的绘图状态。 5. **橡皮擦功能**: - 可以通过设置`ctx.globalCompositeOperation`属性为`'destination-out'`,模拟橡皮擦效果,即将新的绘图与原有图像相减。 6. **改变笔触大小...

    canvas动态画出视图树

    另外,为了提高性能,可以考虑使用剪裁区域(`clip` 方法)或者保存/恢复状态(`save` 和 `restore` 方法)来避免不必要的重绘。如果视图树非常大,还可以采用分层渲染策略,只绘制可见部分或使用虚拟DOM技术优化。 ...

    ecdevtools是支持canvas库的chrome调试工具

    6. **保存与恢复状态**:为了方便比较和测试,ec-devtools提供了保存和恢复canvas状态的功能,避免了反复修改和刷新页面。 在JavaScript开发中,特别是涉及图片展示和处理的应用,canvas是常见且重要的技术。ec-...

    Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)

    在本文中,我们将探讨如何使用Canvas实现图片的标记、缩放、移动以及保存历史状态的功能,这对于在线教育、文档批注等应用场景非常实用。 首先,让我们来看看如何在Canvas上标记图片。这通常涉及到监听用户的鼠标...

    canvas绘制直线并跟随鼠标旋转

    - `restore()`:恢复之前保存的绘图状态。 现在,结合以上知识点,我们可以在鼠标移动时动态改变直线的旋转角度。在`handleMouseMove`函数中,我们可以计算出鼠标的旋转角度,并应用到直线的绘制上。例如: ```...

    重写viewgroup 使用canvas实现动画

    首先,我们需要保存当前的Canvas状态,然后设置旋转中心点,接着旋转Canvas,最后绘制子视图。别忘了在绘制结束后恢复Canvas的状态。 ```java @Override protected void onDraw(Canvas canvas) { super.onDraw...

    canvas粒子球.rar

    比如,避免不必要的重绘,通过保存和恢复状态来减少渲染上下文的操作,以及利用硬件加速等。在处理大量粒子时,合理的数据结构和算法选择也是关键。 总的来说,“canvas粒子球”是一个很好的HTML5 Canvas实践案例,...

Global site tag (gtag.js) - Google Analytics