这是一种递归算法,这意味着它调用自己来完成整个过程的较小部分。
填充将从一个像素开始。然后它将检查四个相邻像素(上、下、左、右)。对于与我们开始使用的颜色相同的四个像素中的任何一个,它将调用从该像素开始的另一个泛滥填充。
想象一张小图在哪里。是一种颜色,X 是另一种颜色。这些数字仅供参考,所以右上角是 7,0。(忽略红色/黑色语法高亮!)
01234567
0........
1.XXXX...
2.X..X...
3.X...X..
4.XXX..X.
5...X..X.
6...XXX..
7........
现在想象一下,您在 3,3 开始进行洪水填充。它将 3,3 更改为新颜色。然后它将检查上、下、左、右。对于向上 (3,2),那里的颜色相同(一个点),因此它将从那里开始另一个泛洪填充。对于down(3,4),颜色不同,所以这个分支会停止。左、(2,3) 和右 (4,3) 也是相同的(一个点),因此更多的洪水填充分支从那里开始。
假设新颜色是 O,所以我们现在有:
01234567
0........
1.XXXX...
2.X.OX...
3.XOOOX..
4.XXX..X.
5...X..X.
6...XXX..
7........
“向上”分支从 (3,2) 开始新的洪水填充。从这里,向上是 X,所以停止。右边是 X,所以停止,向下是 O,所以停止,但左边 (2,2) 是相同的(一个点),所以它从那里开始新的洪水填充。
同样,原始洪水填充的“右”分支从 (4,3) 开始。它唯一可以使用的分支是 down (4,4)。现在我们有了这个:
01234567
0........
1.XXXX...
2.XOOX...
3.XOOOX..
4.XXXO.X.
5...X..X.
6...XXX..
7........
因此洪水填充从 (4,4) 继续,向右和向下分支。然后,这两个分支之一将分支到 (5,5)。到那时,将不会有更多可能的分支。
那是我的午餐时间:)