问题标签 [flood-fill]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 如何使用 HTML Canvas 执行洪水填充?
有没有人在 javascript 中实现了用于 HTML Canvas 的洪水填充算法?
我的要求很简单:从一个点开始用单一颜色泛滥,其中边界颜色是大于指定点颜色的某个增量的任何颜色。
更新:
我编写了自己的洪水填充实现,如下所示。它很慢,但很准确。大约 37% 的时间用于作为原型框架一部分的两个低级数组函数。我想它们是通过 push 和 pop 调用的。其余大部分时间都花在主循环中。
顺便说一句,当我调用它时,我使用了一个自定义的 stopFunction:
如果有人能看到提高此代码性能的方法,我将不胜感激。基本思想是:1)种子颜色是开始泛滥点的初始颜色。2)尝试四个相邻点:上、右、下、左一个像素。3)如果点超出范围或已经访问过,则跳过它。4) 否则将点推到感兴趣点的堆栈上。5) 从堆栈中弹出下一个有趣的点。6) 如果该点的颜色是停止颜色(在 stopFunction 中定义),则停止处理该点并跳到步骤 5。 7) 否则,跳到步骤 2。 8) 当没有更多有趣的点可以访问时, 停止循环。
记住一个点已经被访问过,需要一个元素数与像素数相同的数组。
algorithm - 获取洪水填充的边界矩形的快速方法
我需要对图像的某个区域进行填充。但是我实际上并不需要生成的图像,我只需要知道包含将被洪水填充更改的所有像素的最小矩形。
是否有一种泛洪填充算法的变体可以比完全泛洪填充更便宜地计算这个矩形?
示例输入和输出(仅需要红色矩形):
样本输入图像。红点是起始像素。要填充的区域是青色 Z-tetromino,其中包含点 http://www.finnw.me.uk/ffinput.png示例输出。只有红色矩形的位置/宽度/高度很重要 http://www.finnw.me.uk/ffoutput.png
编辑:带有岛屿的示例#2:带有岛屿的
示例输入 http://www.finnw.me.uk/ffinput2.png
示例输出 http://www.finnw.me.uk/ffoutput2.png
示例 #3:
假岛示例 http://www.finnw.me.uk/ffinput3.png
编辑
抱歉,由于硬盘故障,图像丢失了。当我第一次发布此内容时,SO 没有托管图像,因此我将它们保存在自己的服务器上。
algorithm - 更改 FloodFill-Algorithm 以获得两个数据点的 Voronoi Territory?
我得到了一个有两点的网格。我想计算每个点可以在另一个之前达到的平方数量。目前我实现了一个 FloodFill-Algoritm,它可以计算一个点可以达到的正方形数量。
如何更改该算法以同时或至少一个接一个地对两个点进行“洪水”?
flash - ActionScript 3 中的填充
我正在尝试在 ActionScript3 中编写自己的 Floodfill 函数,因为 Adobe 提供的不够灵活(您只能给出一种目标颜色,我想给出一系列目标颜色。)
所以,到目前为止我想出的可怕代码是这样的:
一个非常基本的递归函数。但显然使用这种方法,flash player 对我来说很糟糕:) 有人有解决方案吗?干杯!
c++ - 带有“层”的溢洪道
我想要的是创建一个带有图层的矢量绘图程序,但为了避免使用透明度/不透明度,我想将每个形状从最低层到最高层绘制到一个位图上。对于填充,我想填充形状。我的问题是,如果我有一个绘制然后填充的形状,那么下一个形状会与它重叠一点,并且新形状的边框与另一个形状的边框相同,那么填充只会部分填充它。有没有办法给定一个形状的坐标,我可以找到填充的实际边界而不是使用目标颜色?谢谢
java - 使用堆栈进行洪水填充
我正在使用 Java 中的递归洪水填充算法来填充图像的某些区域。对于非常小的图像,它可以正常工作,但是当图像变大时,JVM 会给我一个堆栈溢出错误。
这就是为什么我必须使用带有我自己的堆栈的 Flood Fill 重新实现该方法的原因。(我读到这是在这种情况下最好的方法)
谁能解释我如何编码?(如果你手头没有代码,用算法的伪代码就可以了)
我在互联网上阅读了很多内容,但我对它的理解不是很好。
编辑:我添加了我的递归代码
谢谢!
language-agnostic - 什么是好的快速寻路算法?
当您关心所需的时间而不是路径的长度时,什么是好的路径查找算法。
如果您根本不关心路径而只想检查可达性,是否还有更快的算法。
(对于这类东西来说,洪水填充是一个很好的算法吗?)
linked-list - 不相交集的链表表示 - 算法简介文本中的遗漏?
我的上一个 CLRS 问题取得了成功,这是另一个:
在《算法导论》,第二版,p。501-502,描述了不相交集的链表表示,其中每个列表成员维护以下三个字段:
- 集合成员
- 指向
next
对象的指针 - 指向第一个对象(集合
representative
)的指针。
尽管链表可以通过仅使用一个“链接”对象类型来实现,但教科书显示了一个辅助“链表”对象,其中包含指向“头”链接和“尾”链接的指针。拥有指向“尾部”的指针有助于Union(x, y)
操作,因此无需遍历较大集合x
中的所有链接即可开始将较小集合的链接附加y
到它。
但是,为了获得对尾链接的引用,似乎每个链接对象都需要维护第四个字段:对 Linked List 辅助对象本身的引用。在这种情况下,为什么不完全删除 Linked List 对象并使用第四个字段直接指向尾部呢?
你会认为这是文本中的遗漏吗?
iphone - iphone - 在闭合图像中填充颜色
我正在尝试为儿童创建一个应用程序。它会有不同的图像。这些图像将具有不同的闭合形状,如星星、球或任何其他类似图像。我知道如何在 iPhone 上画画。我知道如何选择颜色,如何更改画笔大小等。
我想知道的是选择一种颜色并在触摸图像时,它必须填充触摸坐标周围的封闭区域。可能吗?我该怎么做?(例如,如果我触摸球内部,则必须用一种颜色填充球)
graphics - 我想要没有堆栈且没有递归的洪水填充
我想知道如何在数组上应用洪水填充,我的数组是二维的,其中包含新的罗马字体类型字母边界。边界线包含 1 和内部和外部全 0。我想只在里面填写所有 1 而不是 0。但我需要一个不需要更多内存的逻辑。所以避免递归和堆栈或队列