Я довольно новичок в обработке изображений, и в настоящее время я работаю над приложением, похожим на рисование, которое будет содержать заливку. Тем не менее, я понятия не имею, каков лучший алгоритм для заполнения корзины.
Я реализовал пример, который нашел на этом сайте , однако он столкнулся с проблемами бесконечного цикла, когда пользователь пытался заполнить область, которая уже была заполнена областью того же цвета.
В настоящее время я работаю над этой проблемой, заполняя налево, направо, вверх и затем вниз; тем не менее, я сделал так, чтобы после того, как пиксель был заполнен слева, он не может заполнить вправо, что означает такие формы, как:
не будет заполнен должным образом, если инструмент «Ведро» используется в красной точке.
Поэтому я надеюсь, что кто-то знает алгоритм или ссылку на него, который решит все эти проблемы.
Дополнительная информация: Это будет реализовано с использованием Javascript в качестве инструмента рисования. Он будет использоваться онлайн с использованием элемента Canvas.
источник
Ответы:
Похоже, вы на самом деле ищете то, что называется алгоритмом Flood Fill. Возможно, поэтому вы не нашли тонны примеров для этого. Есть несколько методов Flood Fill, перечисленных на странице Википедии для алгоритма . Я настоятельно рекомендую один из нерекурсивных, «поставленных в очередь» методов.
источник
I highly recommend one of the non-recursive, 'queued' methods.
- Не могли бы вы объяснить, почему?В настоящее время я делаю то же самое. Однако, когда я столкнулся с проблемой, на которую вы указали, я выбрал простое завершение функции, если инструмент щелкнул по области того же цвета, который вы пытаетесь нарисовать (это также похоже на поведение ms-paint) ,
Метод с очередями должен быть чрезвычайно интуитивно понятен для любого, кто имеет некоторый опыт программирования.
Если вы хотите покрасить область вокруг пятна того же цвета, что и ваша краска, вы можете:
Если хотите, можете взглянуть на мой (довольно смущающий) код здесь .
Это далеко не быстро, но работает нормально ...
источник