Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика программирование, учебник.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
22.08 Mб
Скачать

4.4 Создание пользовательского шаблона заливки

Пользователь кроме перечисленных в табл. 7 стандартных шаблонов заливок может создавать свои с помощью процедуры SetFillPattern и заливать ими замкнутые области с помощью процедуры FloodFill.

Основной принцип создания шаблона заливки состоит в следующем. Дана матрица 8  8 = 64 пикселя. Эта матрица многократно дублируется, накрывая словно черепицей всю заливаемую поверхность. Поэтому узор матрицы должен быть таким, чтобы сложенные вместе тождественные узоры матриц образовывали общий однородный узор поверхности. Узор матрицы образуется путем выделения цветом некоторых пикселей, остальные пиксели образуют фон. В качестве примеров на рис. 3.12.a приведен узор "Черепица", а на рис. 3.12.б - узор "Кирпич".

Рис. 3.12 Кодирование шаблона заливки: а) Черепица, б) Кирпич

Пиксели фона получают код 1, а пиксели узора код 0. Восемь пикселей строки (8 бит) составляют один байт матрицы. Всего матрица содержит 8 строк, то есть описывается 8 байтами. Например, первая строка матрицы а) содержит 8 бит двоичного кода 11110111, которые кодируются в шестнадцатеричной системе счисления как $F7. На рис. 3.12 кодировка соответствующих строк матриц представлена справа от матриц.

Процедура SetFillPattern(MP: FPT, CL: WORD) устанавливает текущим пользовательский шаблон MT. MT - переменная типа FPT, где тип FPT определяется следующим образом:

TYPE FTP = Array[1..8] of Byte.

Массив MP содержит 8 байт кодов матрицы шаблона. Переменная CL определяет цвет пикселей, соответствующих значениям 1 в матрице (см. рис. 3.12). Пиксели, помеченные 0, окрашиваются цветом фона, установленным с помощью оператора SetBkColor.

Заливка замкнутой области. Процедура FloodFill

Процедура FloodFill(X, Y: Integer; CB: WORD) осуществляет заполнение текущей заливкой замкнутой области экрана ограниченной кривой цвета CB. Краска заливается в точку с координатами X, Y. Процедура FloodFill одинаково успешно использует для заливки как стандартные шаблоны, определяемые процедурой SetFillStyle, так и пользовательские, устанавливаемые процедурой SetFillPattern.

Пример 22. На черном фоне нарисовать окружность и залить ее черепицей красного цвета, слева от окружности расположить прямоугольник и заполнить его желтыми кирпичами (см. рис. 3.13).

PROGRAM PR22;

USES CRT, GRAPH;

Const MP: FillPatternType = ($F7,$F7,$EB,$1C,$7F,$7F,$BE,$C1);

MP1: FillPatternType = ($7F,$7F,$7F,$00,$F7,$F7,$F7,$00);

VAR dr, md : integer; ch: char;

begin

dr := detect; InitGraph (dr, md, 'd:\tp\bgi');

SetLineStyle (0, 0, 1); {ШИРИНА ЛИНИИ 1 ПИКСЕЛЬ}

SetFillPattern(MP, red); {СТИЛЬ И ЦВЕТ ЗАКРАСКИ КРУГА, ЧЕРЕПИЦА}

SetBkColor (black); ClearDevice; SetColor (1);

Circle (250, 100, 50);

FloodFill(250, 100, 1); {ЗАЛИВКА ОКРУЖНОСТИ ШАБЛОНОМ MP}

SetLineStyle(0, 0, 3); {ШИРИНА ЛИНИИ 3 ПИКСЕЛЯ}

SetFillPattern(MP1, 14); {СТИЛЬ И ЦВЕТ ЗАКРАСКИ ПРЯМОУГОЛЬНИКА,

ЖЕЛТЫЙ КИРПИЧ}

Rectangle(60, 50, 150, 150);

FloodFill(65, 55, 1); {ЗАЛИВКА ПРЯМОУГОЛЬНИКА ШАБЛОНОМ MP1}

ch := readkey;

CloseGraph {ЗАКРЫТИЕ ГРАФИЧЕСКОГО ВИДЕОРЕЖИМА}

End.

Рис. 3.13 Результат работы программы PR22