它是一种递归算法,这意味着它调用自身来完成整个过程的较小部分。
洪水填充将从一个像素开始。然后它将检查四个相邻像素(上、下、左、右)。对于与我们开始的颜色相同的四个像素中的任何一个,它将调用从该像素开始的另一个洪水填充。
想象一下一张小图片在哪里。是一种颜色,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)。到那时,将不再有可能的分支。
这就是我的午餐时间:)