在HTML5画布上清除线条

5
有没有办法取消线条描边? 在我的画布上,有一条透明度为0.5、宽度为20像素的线条。 现在我想让它变长,也就是说,在旧线条的右侧画出另一条新线条。 这样做时,旧线条和新线条之间匹配的点变得不那么透明(因为它们现在由两条线条组成)。 所以我想取消旧线条的描边,然后描绘新线条。 我该怎么做呢? 谢谢。
4个回答

11

clearRect() 是唯一的方法。如果你在画布上绘制了很多元素,一个好的解决办法是在HTML中使用绝对定位叠加两个画布,其中一个用于“静态”绘制,另一个用于计划清除/重绘的绘制的顶层。这样可以节省CPU时间重新绘制整个画布。


10
另一种优雅的选项是将“globalCompositeOperation”设置为“xor”,然后再次绘制您的线条... 这样它就会被删除。

太棒了,很高兴我偶然发现了这个,因为将来我需要做这件事。 - JDS

5

我认为最简单的方法是使用clearRect清除整个画布,然后重新绘制整条线。


5
你如何在画布上绘制是由API严格定义的,但它在软件和/或硬件中的实现取决于浏览器开发人员。一些浏览器使用硬件加速,而其他浏览器正在进行此方面的工作(例如,目前使用软件渲染器)。
在计算机图形学中,当绘制某些内容时,你会将其绘制到缓冲区中。当调用lineTo并描边时,缓冲区会更新,并且底层像素中的所有信息都会丢失(如果使用透明度,则部分丢失),没有办法通过撤销来恢复它们(除非有一个包含大量旧绘画的实现,但这会对内存造成很大负担)。
因此,能够撤销描边可能会节省大量CPU / GPU时间,但会严重增加内存的使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接