Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Процедура FloodFill



Заполняет произвольную замкнутую фигуру, используя текущий стиль заполнения (узор и цвет). Заголовок:

Procedure FloodFill(X,Y: Integer; Border: Word);

Здесь X, Y – координаты любой точки внутри замкнутой фигуры; Border – цвет граничной линии.

Если фигура не замкнута, заполнение «разольется» по всему экрану.

Следует учесть, что реализованный в процедуре алгоритм просмотра границ замкнутой фигуры не отличается совершенством. В частности, если выводится подряд две пустые строки, заполнение прекращается. Такая ситуация обычно возникает при заполнении небольших фигур с использованием типа LtSlashFill. В фирменном руководстве по Турбо Паскалю рекомендуется, по возможности, вместо процедуры FloodFill использовать FillPoly (заполнение прямоугольника).

Следующая программа демонстрирует заполнение случайных окружностей. Сначала в центре экрана создается окно, в котором заполняется небольшой прямоугольник. Часть прямоугольника останется незаполненной, в чем вы можете убедиться, так как программа в этот момент приостанавливает работу, ожидая нажатия на клавишу Enter. Затем осуществляются вывод и заполнение случайных окружностей до тех пор, пока не будет нажата любая клавиша. Заметим, что прямоугольник заполняется полностью, если вместо типа LtSlashFill (косая штриховка линиями обычной толщины) используется SlashFill (штриховка утолщенными линиями). Если программа будет работать достаточно долго, она может «зависнуть», что лишний раз свидетельствует о несовершенстве реализованного в ней алгоритма.

Uses Graph, CRT;

var

d, r, е, х, у, с: Integer;

begin

{Инициируем графику}

d:= Detect; InitGraph(d, r, ' ');

e:= GraphResult;

if e <> grOk then WriteLn(GraphErrorMsg(e))

else

begin

{Создаем прямоугольное окно}

х:= GetMaxX div 4;

у.:= GetMaxY div 4;

Rectangle(х,у,3*x,3*y);

SetViewPort(x+1,y+1, 3*x-1,3*y-1,ClipOn);

{Демонстрируем заливку маленького прямоугольника}

SetPillStyle(LtSlashFill,GetMaxColor);

Rectangle(0,0,8,20); FloodFill(1,1,GetMaxColor);

OutTextXY(10,25,'Press Enter...');

ReadLn; {Ждем нажатия Enter}

{Выводим окружности до тех пор, пока не будет нажата любая клавиша}

repeat

{Определяем случайный стиль заливки}

SetFillStyle(Random(12),Random(GetMaxColor+1));

{Задаем координаты центра и цвет окружности}

х:= Random (GetMaxX div 2);

у:= Random (GetMaxY div 2);

с:= Random (succ(GetMaxColor));

SetColor(c);

{Выводим и заливаем окружность}

Circle(x, у, Random(GetMaxY div 5));

FloodFill (x, у, с)

until KeyPressed;

if ReadKey=#0 then

x:= ord(ReadKey);

CloseGraph

end

end.





Дата публикования: 2014-11-04; Прочитано: 303 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...