我知道如果我从头开始创建画布,可以context.save()
在进行任何更改之前使用context.restore()
它,然后再使用它来恢复它。我的问题是:如果得到的画布已经被修改,那么甚至在使用该context.save()
命令之前,如何将整个上下文重置为默认值?
这是很不幸的,但是实际上您不能做到完美,因为裁剪API坏了...
所有其他属性可以设置为某个绝对值:显而易见fill/strokeStyle
,font
,shadowXXX
等偶变换矩阵完全可以被设置为单位矩阵两种resetTransform()
或setTransform(1,0,0,1,0,0)
。
我们绝对不能设置的一件事是裁剪区域。为此,您必须具有一个初始名称save()
,(或安装我的setClip
polyfill)。
不幸的是,尽管已经多次提出要求,但一些实施者还是坚决反对setClip()
在规范中加入...。
因此,在没有初始调用的情况下完全重置上下文的唯一方法save()
是重置元素的width
或height
属性<canvas>
。但是,这样做还可以清除上下文中的所有当前图形,并且会杀死应用程序的内存使用量:至少在Chrome中,这样做时会分配一个新的图形缓冲区,这意味着GC必须启动以收集先前的缓冲区,其大小可能与大画布有关。将来我们应该能够调用一个reset()
避免这种重新分配问题的方法,但是无论如何它仍然会清除绘图缓冲区。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句