Уважаемые эксперты! В приложении процедура закраски области, ограниченной разными цветами. Она реализована рекурсией и закрасить большие области не представляется возможным - программа вылетает. Может быть кто-нибудь знает линейный алгоритм чего-то похожего? Или поможет другим советом? Большое спасибо!
Здравствуйте, =FeanaR=! Линейный алгоритм достаточно прост. Пусть у тебя есть затравка внутри области (x, y). Сохраняя неизменной координату y проверяешь точки справа и слева от затравочной на цвет фона (точнее, цвет внутренней области до закраски). Заодно проверяешь для каждой точки цвет точки сверху и снизу от нее. Если цвет равен увету фона - запоминаешь эту точку в списке новых затравок. Запоминаешь левую и правую границу линии. Теперь закрашиваешь эту линию в нужный цвет. Выбераешь из списка новую затравку. Если цвет этой затравки уже изменен - переходишь к следующей. Если нет - повторяешь описанные действия с новой затравкой. Когда в списке затравок больше не останется точек - все, область закрашена. Ответ отправлен: 30.03.2004, 12:58 Отправитель: Ayl Отвечает sir henry
Доброе время суток, =FeanaR=! Нужно определить цвет точки, откуда начинается закрашиыание и идти вокруг нее кругами проверяя, не изменился ли цвет. А рекурсивная функция вылетает потому что стек переполняется. Используйте итерационный цикл, типа While. Рисуйте линии от одной границы закраски до другой. Это будет быстрее, чем попиксельное закрашивание. Ответ отправлен: 30.03.2004, 03:22 Отправитель: sir henry Отвечает Boriss
Добрый день, =FeanaR=! А зачем рекурсия? For i:=X downto 0 do if getpixel(i, y) <> ground then break else ... for i:=X+1 to getMaxX do ... Но GetPixel и SetPixel - это очень-очень долгие процедуры. Они каждый раз определяют режим, .... Ими пользоваться не рекомендуют. Лучше обращаться к видеопамяти напрямую. На SVAG обязательно есть пример (я в прошлый раз давал ссылку) Ответ отправлен: 30.03.2004, 09:27 Отправитель: Boriss Отвечает Pawel
Добрый день, =FeanaR=! Нужно идти вдоль граници цвета.Запомнить ключевые координаты, потом закрасить облость. Ответ отправлен: 30.03.2004, 19:51 Отправитель: Pawel Отвечает Snowm@n
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.