Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на языке Pascal

Выпуск № 268
от 02.04.2004, 13:20

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 455
Отправлено ответов: 1683
Активность: 369.8 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Ayl
Статус: Профессиональный
Общий рейтинг: 116.62
[Подробней >>]
sir henry
Статус: Профессиональный
Общий рейтинг: 159.57
[Подробней >>]
Boriss
Статус: Профессиональный
Общий рейтинг: 156.88
URL: Программирование на Паскале
[Подробней >>]
 
Pawel
Статус: Профессиональный
Общий рейтинг: 159.86
[Подробней >>]
Snowm@n
Статус: Доверительный
Общий рейтинг: 112.95
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 453. Уважаемые эксперты! В приложении процедура закраски области, ограниченной разными цветами. Она реали... (ответов: 5)

Вопросов: 1, ответов: 5


 Вопрос № 453

Уважаемые эксперты! В приложении процедура закраски области, ограниченной разными цветами. Она реализована рекурсией и закрасить большие области не представляется возможным - программа вылетает. Может быть кто-нибудь знает линейный алгоритм чего-то похожего? Или поможет другим советом? Большое спасибо!


Приложение:


Вопрос отправлен: 30.03.2004, 02:02
Отправитель: =FeanaR=

[Следующий вопрос >>] [Список вопросов]

Отвечает Ayl

Здравствуйте, =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

Здравствуйте, =FeanaR=!
Увеличте стек {$M 65520,0,655360}

Ответ отправлен: 31.03.2004, 08:09
Отправитель: Snowm@n



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (26)
C / C++ (15)
Perl (3)
Builder / Delphi (17)
Pascal (21)
Basic / VBA (4)
Java / JavaScript (6)
PHP (10)
Криптография (6)
WinAPI (13)
Радиоэлектроника (9)
Пользователю
Windows 95/98/Me (38)
Windows NT/2000/XP (51)
"Железо" (28)
Поиск информации (19)
Администратору
Windows NT/2000/XP (27)
Linux / Unix (10)
Юристу
Гражданское право (11)
Семейное право (10)
Трудовое право (11)
КоАП (8)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное