Краски, палитры, заполнения
Процедура SetFillPattern
Устанавливает образец рисунка и цвет штриховки. Заголовок:
Procedure SetFillPattern(Pattern: FillPatternType;Color: Word);
Здесь:
- Pattern – выражение типа FillPatternType; устанавливает образец рисунка для Fill – UserFill в процедуре SetFillStyle;
- Color – цвет заполнения.
Образец рисунка задается в виде матрицы из 8x8 пикселей и может быть представлен массивом из 8 байт следующего типа:
type FillPatternType = array [1..8] of Byte;
Каждый разряд любого из этих байтов управляет светимостью пикселя, причем первый байт определяет 8 пикселей первой строки на экране, второй байт – 8 пикселей второй строки и т.д.
На рис. 14.8 показан пример двух образцов заполнения. На рисунке черточкой обозначается несветящийся пиксель, а прямоугольником – светящийся. Для каждых 8 пикселей приводится шестнадцатеричный код соответствующего байта.
Следующая программа заполняет этими образцами две прямоугольных области экрана.
Рис. 14.8. Образцы заполнения и их коды:
Uses Graph, CRT; const patt1: FillPatternType= ($49,$92,$49,$92,$49,$92,$49,$92); patt2: FillPatternType= ($00,$18,$24,$42,$42,$24,$18,$00); var d,r,e: Integer; begin {Инициируем графику} d: = Detect; InitGraph(d, r, ''); e: = GraphResult; if e <> grOk then WriteLn(GraphErrorMsg(e)) else begin if d=CGA then SetGraphMode (0); {Устанавливаем цвет для CGA} SetFillStyle(UserFill,White); {Левый верхний квадрат} SetFillPattern(Patt1.1); Bar(0.0,GetMaxX div 2, GetMaxY div 2); {Правый нижний квадрат} SetFillPattern(Patt2.2); Bar(GetMaxX div 2,GetMaxY div 2,GetMaxX,GetMaxY); if ReadKey=#0 then d: = ord(ReadKey); CloseGraph end end.
Если при обращении к процедуре указан недопустимый код цвета, вызов процедуры игнорируется и сохраняется ранее установленный образец заполнения. В частности, если в предыдущем примере убрать оператор:
if d=CGA then SetGraphMode(0);
Устанавливающий цветной режим работы CGA-адаптера, на экран ПК, оснащенного адаптером этого типа, будут выведены два одинаковых прямоугольника, так как обращение:
SetFillPattern(patt2, 2);
Содержит недопустимо большой для данного режима код цвета и обращение игнорируется. Сказанное, однако, не относится к процедуре SetFillStyle для значения параметра Fill в диапазоне от 0 до 11: программа будет нормально работать и в режиме высокого разрешения CGA-адаптера, причем все цвета палитры, кроме цвета фона, при этом заменяются на белый.