5

有没有办法取消划线?在我的画布上,我有一条不透明度为 0.5、宽度为 20 像素的线,比方说。现在我想让它更长,意味着从旧的线中画出另一条线。这样做时,旧线和新线之间的匹配点变得不那么透明(因为它们现在由两条线组成)。所以我想取消旧线,然后再画新线。

我该怎么做?

谢谢

4

4 回答 4

11

clearRect()是唯一的方法。解决此问题的一个好方法(如果您在画布上绘制了很多元素)是使用绝对定位在 HTML 中覆盖两个画布,一个用于“静态”绘图,一个顶层用于您计划的绘图清除/重绘。这也节省了再次绘制所有画布的 CPU 时间。

于 2011-07-08T19:34:01.510 回答
9

另一个优雅的选择是将'globalCompositeOperation'设置为'xor'并再次绘制你的线条......所以它将被删除

于 2012-05-18T09:22:24.797 回答
5

我想最简单的方法是简单地清除整个画布(使用clearRect)并再次绘制整条线

于 2011-07-08T19:23:28.873 回答
5

如何在画布上绘制由 API 严格定义,但如何在软件和/或硬件中完成则取决于浏览器开发人员。一些使用硬件加速的浏览器和其他浏览器正在使用 atm。(例如,使用软件渲染器 atm)

在计算机图形中绘制某些东西时,您绘制到缓冲区。并且当您调用 lineTo 并描边时,缓冲区会更新,并且底层像素中的所有信息都将丢失(如果您使用透明度,则部分信息会丢失)并且无法通过撤消来取回它(除非有一个包含负载的实现旧图纸,但这对记忆来说真的很重)。

因此,能够撤消中风可能会节省大量 CPU/GPU 时间,但会大大增加内存

于 2011-07-09T09:42:23.217 回答