javascript - 用孔填充区域

标签 javascript canvas

我有一个 Canvas ,上面还画了很多东西,现在我想填充一个定义为整个 Canvas 的区域,除了几个洞(我的洞是带弧形的复杂形状)。

只有一个洞,很简单:我通过首先制作一个带有整个 Canvas 矩形的子路径然后制作第二个具有相反缠绕的子路径来制作路径。因此,当我填充生成的路径时,我有效地填充了我的 Canvas ,除了洞。

有几个孔,只要我的孔不相交,它就可以工作:如果相交,此方法会填充我的孔的相交部分,这不是预期的结果。

所以问题来了:如何用相交的孔填充形状?

现在我不想尝试明确地计算我的形状的并集,因为它们很复杂(涉及弧线......)。这就是我没有尝试使用 getImageData() 的原因。

这是一个图形解释:

enter image description here

这应该非常快,因为源 Canvas 和孔都是动画的,但屏幕上几乎不会超过 3 个孔。

最佳答案

我不确定我是否明白问题出在哪里。您只是想在某物之上绘制路径并填充路径的并集?

这在 Canvas 上很容易做到。 Canvas 让您可以绘制路径和子路径,并且您会想要绘制一系列的多个子路径(但只能绘制一个路径)。为避免缠绕,您需要沿同一方向(顺时针或逆时针)绘制所有子路径。

这是一个路径的例子,它实际上是两个子路径的联合,形成一个“洞”:

http://jsfiddle.net/KX8Xf/

请注意,我只调用了一次 BeginPath,然后使用 closePathmoveTo 开始我的新子路径。

如果你想填充它的反转,你可以填充一个内存 Canvas ,将路径绘制为内存 Canvas 的剪切区域,将你的普通 Canvas 绘制到内存 Canvas 上内存 Canvas ,然后将内存 Canvas 绘制回普通 Canvas 。 Here's an example of that

关于javascript - 用孔填充区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7648781/

相关文章:

javascript - 将句子中每个单词的第一个字母大写

javascript - 使用 IONIC 在 IOS 上没有网络连接功能问题

javascript - 使用 jquery/javascript 在 aspx 页面中使用服务器端下拉列表填充客户端下拉列表

php - 从 iframe 更改顶部窗口位置

javascript - 如何获取转换后的 HTML5 Canvas 上的鼠标位置

javascript - HTML/CSS/JS : large, 滚动和缩放平铺网格

javascript - 动画结束时执行动画

javascript - 旋转矩形未准确指向玩家

javascript - paperjs 中的多点触控手势

javascript - 使用 JavaScript 在页面上使用 Canvas 图像路径的 MVC