Перейти к содержанию
Fire Monkey от А до Я
  • 0

Алгоритм заливки замкнутой области рисунка


ODmitrijS

Вопрос

Подскажите алгоритм или готовый пример заливки замкнутой области рисунка произвольной формы определенным цветом?
Моё решение часто приводит к переполнению стека.

Изменено пользователем ODmitrijS
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Вопрос точнее ставьте, используете функции Pascal для заливки цветом или нужно написать алгоритм заливки?

Если первое, то выкладывайте код; если второе - то описание алгоритма и код... 

 

Ссылка на комментарий
  • 0

Интересуют любые варианты.
Использую XE10

Мой вариант. Можно конечно подумать, только вероятно всё придумано до меня:

procedure TForm1.fill(x,y: integer);
begin
  if bitdata1.GetPixel(x,y)=TAlphacolors.white then bitdata1.SetPixel(x,y,Talphacolors.Red);
  if bitdata1.GetPixel(x+1,y) = TAlphacolors.White then
    fill(x+1,y);
  if bitdata1.GetPixel(x-1,y) = TAlphacolors.White then
    fill(x-1,y);
  if bitdata1.GetPixel(x,y+1) = TAlphacolors.White then
    fill(x,y+1);
  if bitdata1.GetPixel(x,y-1) = TAlphacolors.White then
    fill(x,y-1);
end;

 

Изменено пользователем Brovin Yaroslav
Ссылка на комментарий
  • 0

ой-ё... рекурсия, метод лесного пожара, емнип.

Не, если нельзя ограничить глубину вложенности - само собой можно схватить преполнение стека.

понятно, что всё придумано до нас, но если изобретать велосипеды - я бы завел список из TPoint с невозможностью добавления дубликатов (например - TDictionary) и проходил бы по нему вашим алгоритмом, но вместо рекурсивного вызова - добавление точек в список. Точки, закрашиваемые красным - удаляются из списка. Если на очередном проходе списка количество элементов  = 0 - мы обошли всю фигуру.

Изменено пользователем kami
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...