Это рекурсивный алгоритм, означающий, что он вызывает себя для выполнения меньших частей всего процесса.
Заполнение флудом начнется с одного пикселя.Затем он проверит четыре соседних пикселя (вверх, вниз, влево, вправо).Для любого из этих четырех пикселей, которые имеют тот же цвет, что и тот, с которого мы начали, это вызовет другую заливку, начиная с этого пикселя.
Представьте себе маленькую картинку где.один цвет, а 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 на новый цвет.Затем он проверит, вниз, влево, вправо.Для up (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, то есть остановка, вниз - это О, то есть остановка, но влево (2,2) - это то же самое (точка), поэтому он начинает новую заливку оттуда.
Аналогично«Правая» ветвь от первоначальной заливки началась с (4,3).Единственная ветвь, которую он может использовать - вниз (4,4).Теперь у нас есть это:
01234567
0........
1.XXXX...
2.XOOX...
3.XOOOX..
4.XXXO.X.
5...X..X.
6...XXX..
7........
И поэтому заливка продолжается от (4,4), ветвясь вправо и вниз.Одна из этих двух ветвей затем перейдет в (5,5).К тому времени больше не будет возможных ветвей.
И это мой обеденный перерыв:)