Внедрение Floodfill

0

У меня проблема с моей функцией заливки флуда:

void floodfill(int x, int y,Pixel old, Pixel new){

Pixel current = getPixel(x,y);

if(current.r == old.r && current.g == old.g && current.b == old.b){

    setPixel(x,y,new);

    floodfill(x+1,y,old,new);
    floodfill(x-1,y,old,new);
    floodfill(x,y+1,old,new);
    floodfill(x,y-1,old,new);
    floodfill(x+1,y+1,old,new);
    floodfill(x-1,y-1,old,new);
    floodfill(x+1,y+1,old,new);
    floodfill(x-1,y+1,old,new);
}
}

В struct 'Pixel' у меня есть значения rgb пикселя. Я пытаюсь заполнить квадрат, и когда я подхожу к границе квадрата (цвет меняется от белого к черному, граница находится в точке x = 200), функция не меняется на другие пиксели, а просто бесконечно меняет значение x на 198 и 199 (не считая значения y). Может ли кто-нибудь сказать мне, что я делаю неправильно?

  • 0
    Вы только заполняете, если текущий цвет равен старому цвету. Разве вы не хотите заполнить только если текущий цвет не равен старому цвету? PS - new - это зарезервированное ключевое слово в C ++, поэтому вы не должны пытаться использовать его в качестве имени переменной.
  • 0
    Что происходит, если new равно old ?
Показать ещё 2 комментария
Теги:
2d
flood-fill

2 ответа

0
Лучший ответ

Это звучит так, как setPixel не устанавливает цвет (x, y) на "новый". Итак, что происходит, следующая последовательность рекурсивных вызовов:

(199, y) → (200, y) [Это останавливается, потому что граница не имеет того же цвета, что и старый] → (198, y) → (199, y) [(199, y) потому что setPixel, вероятно, не изменил цвет (199, y)] ->...

0

Одна из возможных проблем заключается в том, что вы дважды заполняете (x+1,y+1) и не получаете (x+1,y-1):

floodfill(x+1,y,old,new);
floodfill(x-1,y,old,new);
floodfill(x,y+1,old,new);
floodfill(x,y-1,old,new);
floodfill(x+1,y+1,old,new);
floodfill(x+1,y-1,old,new); //Missing this case
floodfill(x-1,y+1,old,new);
floodfill(x-1,y-1,old,new);
  • 0
    Спасибо за исправление моей ошибки, но сразу после первого заполнения (x + 1, y) моя программа зацикливается.
  • 0
    Вы имеете в виду, что ваша программа попадает в бесконечный цикл или что-то еще? Я предполагаю, что ваша квадратная рамка имеет полный сплошной контур, включая углы, заполненные старым цветом?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню