Canvas 保存状态

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>

交流群:225443677

时间: 2024-12-22 10:43:45

Canvas 保存状态的相关文章

Android组件系列-----Activity保存状态

本篇随笔将详细的讲解Activity保存状态的概念,也就是saving activity state. 一.Activity状态保持概念 保存Activity的状态是非常重要的,例如我们在玩一个游戏的时候,突然来了一个电话,这个时候在接听完电话之后我们返回到游戏中,这个时候我们希望游戏还是之前那个进度,或者说发生突发事件,游戏这个应用程序被关闭了,这个时候我们如果再重新打开游戏的话,我们如果还是希望回到之前的进度,我们就需要将其状态保存起来,这样在Activity的摧毁时,我们还能够根据保存的状

面试中被问到:Android中activity保存状态数据到底该在哪个方法中进行

今天接到一个电面,途中面试官问到一个问题,如果一个activity在后台的时候,因为内存不足可能被杀死,在这之前如果想保存其中的状态数据,比如说客户填的一些信息之类的,该在哪个方法中进行. 我听到的第一反应就是说:在onPause方法中进行保存状态的操作.但是面试官说:onPause()的持续时间很短,假如要进行一些长时间的操作呢? 然后我就纠结了,因为我知道,如果是因为内存不足而被清理,onDestroy()方法一般是不会被执行的.所以只好实话实说,只知道onDestroy在这种情况下不一定会

程序中保存状态的方式之Cookies

程序中保存状态的方式之 Cookies,之前写过一篇关于ViewState的.现在继续总结Cookies方式的 新建的测试页面login <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML

在C 函数中保存状态:registry、reference和upvalues

在C函数中保存状态:registry.reference和upvalues C函数能够通过堆栈来和Lua交换数据,但有时候C函数须要在函数体的作用域之外保存某些Lua数据.那么我们想到全局变量或static变量,这样做的缺点是:(1)为Lua设计C函数库时,导致不可重入.(2)不是全部的Lua值都能非常好的保存到C变量中.那么可不能够将值保存在Lua全局变量里面呢,能够,Lua就提供了一个独立的被称为registry的表,可是Lua代码本身不能訪问它. 1.registry全局注冊表 解释:一个

安卓开发--临时保存状态

内容为转载 转载自:coolxing大神 http://coolxing.iteye.com/blog/1279447 一般来说, 调用onPause()和onStop()方法后的activity实例仍然存在于内存中, activity的所有信息和状态数据不会消失, 当activity重新回到前台之后, 所有的改变都会得到保留. 但是当系统内存不足时, 调用onPause()和onStop()方法后的activity可能会被系统摧毁, 此时内存中就不会存有该activity的实例对象了. 如果之

Android 组件系列-----Activity保存状态

本篇随笔将详细的讲解Activity保存状态的概念,也就是saving activity state. 一.Activity状态保持概念 保存Activity的状态是非常重要的,例如我们在玩一个游戏的时候,突然来了一个电话,这个时候在接听完电话之后我们返回到游戏中,这个时候我们希望游戏还是之前那个进度,或者说发生突发事件,游戏这个应用程序被关闭了,这个时候我们如果再重新打开游戏的话,我们如果还是希望回到之前的进度,我们就需要将其状态保存起来,这样在Activity的摧毁时,我们还能够根据保存的状

node与canvas保存(下载)图片

最近在做一个截图的功能,要保存成图片. 其实这个功能挺简单的,用toDataURL()转换,或者直接用使用canvas2image.js, base64.js这两个脚本实现功能, 部分重要代码如下:                     //简单的使用JavaScript代码实现下载     var imageDate = document.getElementById("canvas").toDataURL("image/png");     window.lo

[Lua]在C函数中保存状态--注册表,环境表,upvalue

什么叫做在C函数中保存状态?比如你现在使用Lua调用了C函数Func1,但是Func1中有一些数据在调用完以后保存下来,供以后使用.而这些数据就是所谓的状态,也就是我们需要保存的东东.有人就会说了,Lua调用C时,把所有的需要保存的状态都返回到Lua中,当调用下一个函数时,将需要的状态当做参数再传进去,不错,是一个办法,但是很麻烦.方法一:注册表:方法二:环境:方法三:upvalue. 注册表是一个全局的table,它只能被C代码访问.通常,可以用它来保存那种需要在几个模块中共享的数据: 但是,

Fragment、Activity 保存状态

Activity 保存状态1. void onCreate(Bundle savedInstanceState) 当Activity被第首次加载时执行.我们新启动一个程序的时候其主窗体的onCreate事件就会被执行.如果Activity被销毁后(onDestroy后),再重新加载进Task时,其onCreate事件也会被重新执行.注意这里的参数 savedInstanceState(Bundle类型是一个键值对集合,大家可以看成是.Net中的Dictionary)是一个很有用的设计,由于前面已