Floodfill что это в паскале

Процедура FloodFill.

Процедура FloodFill закрашивает замкнутую область. Данная процедура имеет 3 параметра. Первые 2 параметра определяют точку с координатами, откуда начинается закраска. 3-й параметр определяет границу закраски.

Строка №19. Устанавливаем красный цвет для окружности.

Строка №20. Устанавливаем тип и цвет закраски.

Строка №21. Рисуем окружность.

Строка №22. Устанавливаем зеленый цвет для 2-ой окружности.

Строка №23. Рисуем 2-ую окружность.

Строка №24. Процедура FloodFill закрашивает замкнутую область. Первые 2 параметра являются координатой и определяют, какая область будет закрашена. В нашем примере эти параметры имеют значения 150 пикселей,150 пикселей. Эта точка входит в обе окружности, которые мы нарисовали. Поэтому какая-то из этих окружностей будет закрашена. Какая именно – зависит от 3-го параметра процедуры. Он определяет цветовую границу закраски. В нашем примере этот параметр равен 2, т.е. имеет зеленую цветовую границу. Поэтому будет закрашена зеленая окружность (та, что в строке №23).
Тип и цвет закраски установлен в строке №20.

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

Теперь поменяем строку №24, установив в качестве цветовой границы красный цвет (строка №24 будет иметь вид FloodFill (150,150, 4)). После этих изменений границей закраски будет красная окружность.
После запуска программы получится:

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

Если первые 2 параметра будут иметь другие координаты, которые выходят за пределы окружностей, то закрашена будет вся область, которая лежит за пределами окружностей.
Изменим строку №24 на такую: FloodFill(300,300, 4). В результате, будет закрашена область, лежащая за пределами обоих окружностей. Причем границей закраски будет красная окружность.

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

Теперь изменим строку №24 на такую FloodFill(300,300, 2). В результате будет закрашена область, лежащая за пределами зеленой окружности.

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

Если в качестве 3-го параметра указать несуществующую цветовую границу, то будет зарисован весь экран. Например, запишем строку №24 в таком виде FloodFill (300,300, 1). Здесь в качестве цветовой границы указан синий цвет, но в нашей программе нет замкнутых областей, имеющих синюю границу, поэтому будет зарисован весь экран.

Источник

Pascal: Занятие № 4 часть II. Графика в Паскале

Графика в Паскале

Для работы с графикой в pascal abc используется модуль GraphABC. Для его подключения используется следующий код:

Система координат в Паскале соответствует экранной системе координат и выглядит следующим образом:

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

Управление цветом

Для того, чтобы использовать цвет, необходимо применить этот цвет к инструменту перо:

или использовать для заливки:

После чего можно использовать процедуры для рисования геометрических фигур.

clBlack – черный
clPurple – фиолетовый
clWhite – белый
clMaroon – темно-красный
clRed – красный
clNavy – темно-синий
clGreen – зеленый
clBrown – коричневый
clBlue – синий
clSkyBlue – голубой
clYellow – желтый
clCream – кремовый
clAqua – бирюзовый
clOlive – оливковый
clFuchsia – сиреневый
clTeal – сине-зеленый
clGray – темно-серый
clLime – ярко-зеленый
clMoneyGreen – цвет зеленых денег
clLtGray – светло-серый
clDkGray – темно-серый
clMedGray – серый
clSilver – серебряный

Точки, отрезки и ломаные

Для отображения точки в паскале используется процедура:

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

uses GraphABC; begin SetPixel(300,200,clred); end.

Для рисования линии используется:

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

uses GraphABC; begin SetPenColor(clgreen); line(100,50,500,250); end.

[Название файла: L4_2task0.pas ]

Для установки размеров графического окна используется процедура

Рисование фигур

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

uses GraphABC; begin Rectangle(50,50,200,200); end.

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

uses GraphABC; begin Rectangle(50,50,200,200); FloodFill(100,100,clBlue); end.

Line(x1,y1,x2,y2);
LineTo(x,y);

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

uses GraphABC; begin setpenwidth(20); setpencolor(clred); moveTo(300,100); lineTo(500,300); lineto(100,300); lineto(300,100); floodfill(300,200,clgreen); end.

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

uses GraphABC; begin Circle(500,200,100); FloodFill(500,200,clred); end.

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

uses GraphABC; Begin SetPenWidth(10); Arc(300,250,150,45,135); end.

[Название файла: L4_2task1.pas ]

[Название файла: L4_2task2.pas ]

Функция random для использования окраски

* раскрасить круги случайным цветом

[Название файла: L4_2task3.pas ]

[Название файла: L4_2task4.pas ]

[Название файла: L4_2task5.pas ]

Нарисовать штриховку на Паскале можно, используя процедуры рисования прямоугольника и линии:
Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

Программа будет выглядеть следующим образом:

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

[Название файла: L4_2task6.pas ]

Анимация в Паскале

Анимация в программировании заключается в том, что сначала рисуется фигура цветным инструментом, затем с тем же координатами рисуется та же фигура белым цветом. После чего происходит сдвиг фигуры и действия повторяются.

uses GraphABC; var x:integer; begin x:=40; repeat SetPenColor(clWhite); Circle(x,100,10); <Рисуем белую окружность>SetPenColor(clBlack); Circle(x,100,10); <Рисуем черную окружность>x:=x+1 <Перемещаемся немного направо>until x>600; end.

Источник

самоучитель Паскаль он-лайн

Он-лайн самоучитель Паскаль

Краски, палитры, заполнения

Устанавливает текущий цвет для выводимых линий и символов. Заголовок:

Procedure SetColor(Color: Word);

В модуле Graph определены точно такие же константы для задания цвета, как и в модуле СИГ (см. п.13.2).

Функция GetColor. Возвращает значение типа Word, содержащее код текущего цвета. Заголовок:

Function GetColor: Word;

Возвращает значение типа Word, содержащее максимальный доступный код цвета, который можно использовать для обращения к SetColor. Заголовок:

Function GetMaxColor: Word;

Устанавливает цвет фона. Заголовок:

Procedure SetBkColor(Color: Word);

Если Ваш ПК оснащен цветным экраном, следующая программа продемонстрирует работу процедуры SetBkColor. Программа выводит десять вложенных друг в друга прямоугольников, после чего циклически меняет цвет фона. Для выхода из программы достаточно нажать на любую клавишу.

NC: array [0..15] of String [12] =

d, r, e, k, color, dx, dy: Integer;

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

e := GraphResult; if e <> grOK then

OutTextXY(200,GetMaxY div 2,’BACKGROUND COLOR’);

dx := GetMaxX div 30;

dy := GetMaxY div 25;

Bar(345,GetMaxY div 2,440,GetMaxY div 2+8);

OutTextXY(345,GetMaxY div 2,NC[color]);

if color > White then

color := Black until KeyPressed;

Возвращает значение типа Word, содержащее текущий цвет фона. Заголовок:

Function GetBkColor: Word;

Заменяет один из цветов палитры на новый цвет. Заголовок:

Procedure SetPalette(N: Word; Color: Shortlnt);

Следующая программа выводит на экран ряд прямых разного цвета и затем случайным образом меняет цвета палитры.

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

e := GraphResult; if e <> grOK then

SetLineStyle(SolidLn, 0, ThickWidth);

for Color := 0 to Palette.Size-1 do

Line(GetMaxX div 3,Color*10,2*GetMaxX div 3,Color*10)

while not KeyPressed do

for e := 0 to Palette.Size-1 do

if ReadKey=#0 then d := ord(ReadKey);

Возвращает размер и цвета текущей палитры. Заголовок:

Procedure GetPalette(var Palettelnfo: PaletteType);

В модуле Graph определена константа

Colors : array [0..MaxColors] of Shortlnt

С помощью следующей программы можно вывести на экран номера всех возможных цветов из текущей палитры.

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

e := GraphResult; if e <> grOk then

for k := 0 to pred(Size) do

Изменяет одновременно несколько цветов палитры. Заголовок процедуры:

Procedure SetAllPalette(var Palette);

В следующей программе происходит одновременная смена сразу всех цветов палитры.

Palette: array [0..MaxColors] of Shortint;

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

e := GraphResult; if e <> grOk then

SetLineStyle(SolidLn, 0, ThickWidth);

for k := 1 to GetMaxColor do

Line(GetMaxX div 3,k*10,2*GetMaxX div 3,k*10)

for k := 1 to MaxColors do

if ReadKey=#0 then k := ord(ReadKey);

Возвращает значение типа Integer, содержащее размер палитры (максимальное количество доступных цветов). Заголовок:

Function GetPaletteSize: Integer;

Возвращает структуру палитры, устанавливаемую по умолчанию (в режиме автонастройки). Заголовок:

Procedure GetDefaultPalette(var Palette: PaletteType);

Устанавливает стиль (тип и цвет) заполнения. Заголовок:

Procedure SetFillStyle(Fill,Color: Word);

С помощью заполнения можно покрывать какие-либо фрагменты изображения периодически повторяющимся узором. Для указания типа заполнения используются следующие предварительно определенные константы:

Программа из следующего примера продемонстрирует Вам все стандартные типы заполнения.

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

e := GraphResult; if e <> grOk then

if ReadKey=#0 then k := ord(ReadKey);

Если параметр Fill имеет значение 12 (UserFill), то рисунок узора определяется программистом путем обращения к процедуре SetFillPattern.

Устанавливает образец рисунка и цвет штриховки. Заголовок:

Procedure SetFillPattern(Pattern: FillPatternType;Color: Word);

Образец рисунка задается в виде матрицы из 8×8 пикселей и может быть представлен массивом из 8 байт следующего типа:

FillPatternType = array [1..8] of Byte;

Следующая программа заполняет этими образцами две прямоугольных области экрана.

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

Рис.14.8. Образцы заполнения и их коды

pattl: FillPatternType= ($49,$92,$49,$92,$49,$92,$49,$92);

patt2: FillPatternType= ($00,$18,$24,$42,$42,$24,$18,$00);

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

e := GraphResult; if e <> grOk then

Bar(0,0,GetMaxX div 2, GetMaxY div 2);

Bar(GetMaxX div 2,GetMaxY div 2,GetMaxX,GetMaxY);

if ReadKey=#0 then d := ord(ReadKey);

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

содержит недопустимо большой для данного режима код цвета и обращение игнорируется. Сказанное, однако, не относится к процедуре SetFillStyle для значения параметра Fill в диапазоне от 0 до 11: программа будет нормально работать и в режиме высокого разрешения CGA-адаптера, причем все цвета палитры, кроме цвета фона, при этом заменяются на белый.

Возвращает образец заполнения, установленный ранее процедурой SetFillPattern. Заголовок:

Procedure GetFillPattern(var Pattern: FillPatternType);

Если программа не устанавливала образец с помощью процедуры SetFillPattern, массив Pattern заполняется байтами со значением 255 ($FF).

Возвращает текущий стиль заполнения. Заголовок:

Procedure GetFillSettings(var Pattlnfo: FillSettingsType);

В модуле Graph определен тип:

Поля Pattern и Color в этой, записи имеют то же назначение, что и аналогичные параметры при обращении к процедуре SetFillStyle.

Устанавливает цветовую гамму при работе с дисплеем IBM 8514 и адаптером VGA. Заголовок:

Procedure SetRGBPalette(ColNum,RedVal, GreenVal,BlueVal:Integer);

В следующей программе в центре экрана выводится прямоугольник белым цветом, после чего этот цвет случайно изменяется с помощью процедуры SetRGBPalette. Для выхода из программы нужно нажать любую клавишу.

Driver, Mode, Err, xl, yl: Integer;

else if Driver in [IBM8514, VGA] then

while not KeyPressed do

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

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

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

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

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

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

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

Источник

Floodfill что это в паскале

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскалеФорум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале floodfill
Регистрация

Kogda цвет заливки задаю белый, то все работает нормально, при других значениях заливается весь экран.В чем проблема?

TinMan как всегда прав!
указывается цвет границы, до которой заливать.

FloodFill (procedure) (Graph unit)
Fills a bounded region with the current fill pattern and color.

Declaration:
procedure FloodFill(X, Y: Integer; Border: Word);

Target:
Real, Protected

Remarks:
Fills an enclosed area on bitmap devices. (X, Y) is a seed within the
enclosed area to be filled. The current fill pattern, as set by SetFillStyle
or SetFillPattern, is used to flood the area bounded by Border color. If the
seed point is within an enclosed area, then the inside will be filled. If
the seed is outside the enclosed area, then the exterior will be filled.

Источник

Русские Блоги

Подробное объяснение и применение алгоритма FloodFill

Подробное объяснение и применение алгоритма FloodFill

Что такое алгоритм FloodFill,

Во-первых, создать основу

Посмотрите на вопрос:
Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

С помощью фреймворка прямо в коде:

2. Детали исследования

Зачем попадать в Бесконечная рекурсия Что ж, это легко понять, потому чтоКаждую координату необходимо искать вверх, вниз, влево и вправо, поэтому поиск координаты будет осуществляться по координатам вверх, вниз, влево и вправо. При многократном поиске вы должны убедиться, что рекурсивная функция может завершиться правильно, иначе она попадет в бесконечный цикл.

Почему newColor и origColor могут нормально выйти, если они разные? Нарисуйте схему алгоритма, чтобы понять:

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

но, Если origColor совпадает с newColor, этот оператор if не позволит fill (1, 1) * выйти правильно, но откроет следующую повторяющуюся рекурсию, образуя бесконечный цикл 。

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

Три, детали обработки

Как избежать вышеперечисленных проблем, проще всего придумать Используйте двумерный массив bool того же размера, что и изображение, чтобы записывать места, где вы ходили, и немедленно возвращайтесь, если найдете дубликат 。

Совершенно нормально, это тоже обычный способ работы с «картинками». Но для этой проблемы, не открывая массив, у нас есть лучший способ, то есть Алгоритм обратного отслеживания 。

Преамбула »Подробный алгоритм поиска с возвратомКак я уже сказал, я не буду здесь вдаваться в подробности и установлю структуру алгоритма обратного отслеживания напрямую:

В-четвертых, автоматический инструмент «волшебная палочка» и применение алгоритма FloodFill при поиске шахт.

Большинство программ для редактирования фотографий должны иметь функцию «Auto Magic Wand Tool»: щелкните место, чтобы автоматически выбрать части схожих цветов. Как показано на рисунке ниже, я хочу выбрать орла.Сначала я могу использовать автоматическую волшебную палочку, чтобы выбрать фон голубого неба, а затем отменить выделение, чтобы выбрать орла. Разберем принцип работы автоматического инструмента волшебная палочка.

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

Очевидно, что этот алгоритм определенно основан на алгоритме FloodFill, но есть два отличия:

Для первой проблемы ее легко решить, вы можете установить пороговое значение, а цвета, которые колеблются в пределах диапазона пороговых значений, считаются origColor:

Что касается второго вопроса, мы сначала проясним проблему: не окрашивайте весь origColor в области, а только окрашивайте крайний круг области. Затем мы анализируем, как мы можем окрасить только периферию, то есть как мы можем найти самые внешние координаты, и каковы характеристики самых внешних координат?

Floodfill что это в паскале. Смотреть фото Floodfill что это в паскале. Смотреть картинку Floodfill что это в паскале. Картинка про Floodfill что это в паскале. Фото Floodfill что это в паскале

Можно обнаружить, что по крайней мере одно направление координат на границе области не является origColor, но координаты внутри области являются origColor со всех четырех сторон.Это ключ к решению проблемы. Не изменяйте фрейм и используйте массив посещений для записи найденных координат.Основной код выглядит следующим образом:

Таким образом, внутренние координаты области будут равны 4 после исследования окрестностей, а координаты границ будут встречаться с другими цветами или превышать индекс границы, а окружение будет меньше 4. Если вы не понимаете это предложение, давайте абстрагируемся от логической схемы, чтобы увидеть:

Эти четыре суждения if охватывают все возможные случаи (x, y), значение окружающего звука получается путем добавления четырех рекурсивных функций, а возвращаемое значение каждой рекурсивной функции является одним из этих четырех случаев. С этой логической структурой вы должны уметь понять вышеприведенное предложение.

Это достигает цели окрашивания только координат границы области origColor, что эквивалентно завершению функции инструмента «волшебная палочка» для выбора границы области.

У этого алгоритма есть две детали:Один из них заключается в том, что посещение должно использоваться для записи координат, которые были исследованы, и алгоритм обратного отслеживания не может использоваться; второй заключается в том, что последовательность первых нескольких if не может быть нарушена

Таким же образом, думая об играх с тралением мин, используя алгоритм FloodFill для расширения пустой области, также необходимо рассчитать и отобразить количество мин на границе. Как этого добиться?

Фактически, это та же идея: она возвращает истину при встрече с громом, так что переменная окружающего звука хранит количество громов. Конечно, алгоритм FloodFill для траления мин может проверять не только вверх, вниз, влево и вправо, но и четыре диагональных направления.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *