Некоторые функции для работы с цветом
RGB(R,G,B) | Возвращает цвет(типа Color), который содержит красную (R), зеленую (G) и синюю (B) составляющие (R,G,B - в диапазоне от 0 до 255). |
ARGB(A,R,G,B) | Возвращает цвет(типа Color), который содержит прозрачность (A), красную (R), зеленую (G) и синюю (B) составляющие (A,R,G,B- в диапазоне от 0 до 255). |
clRandom | Возвращает случайный цвет(типа Color). |
GetRed(C) | Возвращает красную составляющую цвета C–целое число в диапазоне от 0 до 255 |
GetGreen(C) | Возвращает зеленую составляющую цвета C–целое число в диапазоне от 0 до 255 |
GetBlue(C) | Возвращает синюю составляющую цвета C–целое число в диапазоне от 0 до 255 |
GetAlpha(C) | Возвращает составляющую прозрачности цвета C–целое число в диапазоне от 0 до 255 |
Пример5. С помощью функции RGB можно получить любой цвет, указав нужные базовые составляющие.Используя функцию RGB, будем получать различные цвета и закрашивать ими графическое окно с помощью процедуры ClearWindow.
UsesGraphABC; // подключение модуля
begin// начало программы
SetWindowCaption('красный цвет'); // красный цвет
ClearWindow(RGB(255,0,0)); // очистка окна красным цветом
ReadLn; // пауза до нажатия ENTER
SetWindowCaption('зеленый цвет'); // зелёный цвет
ClearWindow(RGB(0,255,0)); // очистка окна зеленым цветом
ReadLn; // пауза до нажатия ENTER
SetWindowCaption('синий цвет'); // синий цвет
ClearWindow(RGB(0,0,255)); // очистка окна синим цветом
ReadLn; // пауза до нажатия ENTER
SetWindowCaption('красный + зелёный = ?'); // красный + зелёный
ClearWindow(RGB(255,255,0)); // очистка окна заданным цветом
ReadLn; // пауза до нажатия ENTER
SetWindowCaption('красный + синий = ?'); // красный + синий
ClearWindow(RGB(255,0,255)); // очистка окна заданным цветом
ReadLn; // пауза до нажатия ENTER
SetWindowCaption('зелёный + синий = ?'); // зелёный + синий
ClearWindow(RGB(0,255,255)); // очистка окна заданным цветом
ReadLn; // пауза до нажатия ENTER
SetWindowCaption('оттенок серого'); // когда всех поровну
ClearWindow(RGB(100,100,100)); // очистка окна серым цветом
ReadLn; // пауза до нажатия ENTER
SetWindowCaption('белый цвет'); // белый цвет
ClearWindow(RGB(255,255,255)); // очистка окна белым цветом
ReadLn; // пауза до нажатия ENTER
SetWindowCaption('чёрный цвет'); // чёрный цвет
ClearWindow(RGB(0,0,0)); // очистка окна чёрным цветом
ReadLn; // пауза до нажатия ENTER
SetWindowCaption('случайный цвет'); // случайный цвет
ClearWindow(clRandom); // очистка окна случайным цветом
End. // конец программы
Цветовые константы
(здесь приведено только несколько цветовых констант, на самом деле в модуле их около 140)
Цветовая константа | Цвет |
clBlack | Чёрный |
clMaroon | Красно-коричневый |
clGreen | Зелёный |
clOlive | Желтовато-зелёный |
clNavy | Тёмно-синий |
clPurple | Пурпурный |
clSkyBlue | Голубой |
clGray | Серый |
clSilver | Серебряный |
clRed | Красный |
clLime | Салатовый |
clYellow | Жёлтый |
clBlue | Синий |
clFuchsia | Ярко-розовый |
clAquamarine | Бирюзовый |
clLightGray | Светло-серый |
clDarkGray | Тёмно-серый |
clWhite | Белый |
Пример6.Получениеи вывод базовых составляющих цвета clAquamarine.
UsesGraphABC; //подключение модуля
VarC: Color; //переменная С типа Color
begin//начало программы
Window.Caption:='Цвет Aquamarine'; // заголовок окна
C := clAquamarine; //С получила значение clAquamarine
WriteLn('Red=',GetRed(C),
'Green=',GetGreen(C),
'Blue=',GetBlue(C)); // вывод базовых составляющих цвета
End.//конец программы
Пример 7.Получение и вывод базовых составляющих случайного цвета.
UsesGraphABC; //подключение модуля
VarC: Color; //переменная С типа Color
begin//начало программы
Window.Caption:='Случайный цвет'; // заголовок окна
C := clrandom; //С получила случайное значение
Print(GetAlpha(C), //вывод прозрачности
GetRed(C), // и базовых составляющих цвета С
GetGreen(C),
GetBlue(C));
end.//конец программы
Рисование в графическом окне.
Рисование осуществляется текущим пером Pen(рисование линий и контуров фигур), текущей кистью Brush(заливка замкнутых областей) и текущим шрифтом Font(вывод строк).
Перо
Для рисования линий, контуров фигур и текста используется объект Pen(перо). Объект Pen имеет ряд свойств. Среди них:
- Color – цвет пера (по умолчанию clBlack- чёрный);
- Width – толщина перав пикселах (по умолчанию – 1 пиксел);
- Style – стиль пера(по умолчанию – psSolid);
- X – x-координата текущей позиции пера;
- Y– y-координата текущей позиции пера;
Стили пера
Значения свойства Styleобъекта Pen | Стиль линии | Образец линии |
psSolid(по умолчанию) | Сплошное перо | |
psClear | Прозрачное перо | |
psDash | Штриховое перо | |
psDot | Пунктирное перо | |
psDashDot | Штрихпунктирное перо | |
psDashDotDot | Перо, чередующее штрих и два пунктира |
Перо по умолчанию пишет чёрной сплошной линией толщиной 1 пиксел. Задать другие значения легко, присваивая свойствам пера нужные значения:
Pen.Color := clRed; {перо будет писать красным цветом}
Pen.Width:= 3; {толщина пера – 3 пиксела }
Pen.Style := psDot; {линии будут пунктирные}(
Такого же результата можно достичь, используя следующие процедуры:
SetPenColor(clRed); {перо будет писать красным цветом}
SetPenWidth(3); {толщина пера – 3 пиксела }
SetPenStyle(psDot); {линии будут пунктирные}
Процедуры движения пера, рисования отрезков | |
MoveTo(X,Y); | Перо устанавливается в точку X,Y |
LineTo(X,Y); | Рисуется отрезок от текущей позиции пера до точки (X,Y). Текущая позиция переносится в точку (X,Y). |
Line(X1,Y1, X2,Y2); | Рисуется отрезок от точки (X1,Y1) до точки (X2,Y2). Положение пера не изменяется. |
Процедура закраски замкнутой области | |
FloodFill(X,Y,C); | Закрашивает замкнутую область одного цвета цветом C, начиная с точки (X,Y), находящейся внутри замкнутой области. |
Пример 8. Нарисовать диагонали графического окна с помощью поцедуры Line
UsesGraphABC;
Begin
Window.Title := 'Диагонали окна';
Pen.Color := clRandom; {случайный цвет пера}
Pen.Width := 5; {толщина пера – 5 пикселов }
Pen.Style := psDash; {штриховое перо}
Line(0,0, WindowWidth,WindowHeight);
Line(0,WindowHeight, WindowWidth,0);
end.
Пример9. Нарисовать и закрасить пятиконечную звезду
Вершины пятиконечной звезды имеют координаты: A (200,100) B (295,169) C (259,281) D (141,281) E (105,169) Красным пером толщиной 4 пиксела нарисовать звезду, используя процедуры рисования MoveTo и LineTo. Дополнительно: закрасить звезду красным цветом, используя процедуру FloodFill. |
UsesGraphABC;
Begin
Window.Caption :='Пятиконечная звезда'; // Заголовок окна
Pen.Color := clRed; // Красный цвет пера
Pen.Width := 4; // Толщина пера 4 пиксела
{Другой вариант программы, где предыдущие три оператора заменяются процедурами:
SetWindowCaption('Пятиконечная звезда');
SetPenColor(clRed);
SetPenWidth(3);
}
MoveTo(200, 100); // Установить перо в точку А
LineTo(259, 281); // Отрезок АС
LineTo(105, 169); // Отрезок СЕ
LineTo(295, 169); // Отрезок ЕВ
LineTo(141, 281); // Отрезок ВD
LineTo(200, 100); // Отрезок DА
FloodFill(200, 200, clred); // Закраска центрального пятиугольника
FloodFill(200, 104, clRed); // Закраска вершины A
FloodFill(280, 170, clRed); // Закраска вершины B
FloodFill(120, 170, clRed); // Закраска вершины E
FloodFill(240, 240, clRed); // Закраска вершины C
FloodFill(160, 240, clRed); // Закраска вершины D
end.
Как нарисовать круг в графическом окне?
Центр круга спроектируем на оси координат. На оси X получаем точку X0, а на оси Y получаем точку Y0. Это и есть координаты центра круга – (X0,Y0). Радиус круга обозначен буквой R. Чтобы задать круг, надо вызвать нужную процедуру и в ней перечислить 3 параметра – координаты центра и радиус: X0,Y0,R. |
Процедуры рисования круга
DrawCircle(X0,Y0,R); | Контур круга (окружность) рисуется текущим пером. Внутренность круга не закрашивается |
FillCircle(X0,Y0,R); | Внутренность круга закрашивается текущей кистью. Контур круга (окружность)не рисуется |
Circle(X0,Y0,R); | Контур круга (окружность) рисуется текущим пером. Внутренность круга закрашивается текущей кистью. |
Пример 10.Нарисуем пять концентрических окружностей разными стилями пера.
Центр окружностей – точка (320,240).
UsesGraphABC; //подключение модуля GraphABC
begin //начало программы
Window.Caption := ' «Стильные» окружности'; // заголовок окна
Pen.Color := clRandom; // задали случайный цвет пера
Pen.Width := 3; // толщина пера - 3 пиксела
Pen.Style := psSolid; // стиль пера "Сплошное перо"
DrawCircle(320,240, 220); // нарисовали сплошную окружность R=220
Pen.Style := psDash; // стиль пера "Штриховое перо"
DrawCircle(320,240, 180); // нарисовали штриховую окружность R=180
Pen.Style := psDot; // стиль пера "Пунктирное перо"
DrawCircle(320,240, 140); // нарисовали пунктирную окружность R=140
Pen.Style := psDashDot; // стиль пера "Штрихпунктирное перо"
DrawCircle(320,240, 100); // штрихпунктирная окружность R=100
Pen.Style := psDashDotDot; // стиль пера "Штрих и два пунктира"
DrawCircle(320,240, 60); // нарисовали окружность таким стилем R=60
end.
Другой вариант программы, где для изменения свойств объекта Penиспользуются процедуры:
UsesGraphABC; //подключение модуля GraphABC
begin //начало программы
SetWindowCaption('«Стильные» окружности'); // заголовок окна
SetPenColor(clRandom); // задали случайный цвет пера
SetPenWidth(3); // толщина пера - 3 пиксела
SetPenStyle(psSolid); // стиль пера "Сплошное перо"
DrawCircle(320,240, 220); // нарисовали сплошную окружность R=220
SetPenStyle(psDash); // стиль пера "Штриховое перо"
DrawCircle(320,240, 180); // нарисовали штриховую окружность R=180
SetPenStyle(psDot); // стиль пера "Пунктирное перо"
DrawCircle(320,240, 140); // нарисовали пунктирную окружность R=140
end.
Кисть
Для закрашивания внутренностей замкнутых областей используется объект Brush(кисть). Объект Brushимеет ряд свойств:
- Style – стиль кисти(по умолчанию - bsSolid);
- Color – цвет кисти(по умолчанию clWhite- белый);
- Hatch – штриховка(по умолчанию - bhCross);
- HatchBackgroundColor – фон штриховки(по умолчанию clWhite- белый).
Среди свойств кисти определяющим является свойство Style – стиль кисти.
Стили кисти
Значения свойства Style объекта Brush | |
bsSolid (по умолчанию) | Сплошная кисть. Закрашивает замкнутую область. Цвет сплошной кисти задаётся свойством - Color – цвет кисти(по умолчанию clWhite- белый). |
bsClear | Прозрачная кисть.Закраска не происходит. |
bsHatch | Штриховая кисть. Штрихует замкнутую область. Для штриховой кисти свойство Color не срабатывает, зато можно устанавливать свойства: - Hatch – штриховка(по умолчанию bhCross- клетка); - HatchBackgroundColor – фон штриховки (по умолчанию - белый) |
Стили штриховки(здесь приведено несколько штриховок, на самом деле в модуле их около 60)
Значения свойства Hatch объекта Brush | Штриховка | Образец штриховки |
bhCross | Прямоугольная клетка | |
bhDiagonalCross | Косоугольная клетка | |
bhBackwardDiagonal | Косой штрих / / / / / | |
bhForwardDiagonal | Косой штрих \ \ \ \ \ | |
bhHorizontal | Штриховка горизонтальными линиями | |
bhVertical | Штриховка вертикальными линиями |
Задание свойств кисти:
Brush.Color:= clGreen;{цвет сплошной кисти - зелёный}
Brush.Style:= bsHatch;{стиль кисти– штриховая кисть}
Brush.Hatch:= bhDiagonalCross;{стиль штриховки – косоугольная клетка}
Brush.HatchBackgroundColor:=clBlue; {задний плана штриховки - синего цвета}
Такого же результата можно достичь, используя следующие процедуры:
SetBrushColor(clGreen);{цвет сплошной кисти - зелёный}
SetBrushStyle(bsHatch);{стиль кисти – штриховая кисть}
SetBrushHatch(bhDiagonalCross);{стиль штриховки – косоугольная клетка}
SetHatchBrushBackgroundColor(clBlue);{задний плана штриховки - синего цвета}
Пример 11.Работа с кистью.
Нарисуем три круга с помощью процедуры Circle.
Эта процедура нарисует круги текущим пером чёрного цвета (по умолчанию), и каждый круг закрасит кистью в зависимости от установленного стиля кисти.
UsesGraphABC; // Подключили модуль GraphABC
begin// Начало программы
Window.Caption:='«Стильные» круги';// Заголовок графического окна
Brush.Color := clYellow;// Задали цвет кисти - clYellow (жёлтый)
Brush.Hatch := bhVertical;//Задали стиль штриховки-bhVertical(вертикаль)
Brush.HatchBackgroundColor:=clLime;//Задали фон штриховки-clLime(салатовый)
Brush.Style := bsClear;// Задали стиль кисти - Прозрачная кисть (bsClear)
Circle(100,240,100); // Нарисовали первый круг
// Видим, что закраска и штриховка отсутствуют
Brush.Style := bsSolid;// Задали стиль кисти - Сплошная кисть (bsSolid)
Circle(300,240,100); // Нарисовали второй круг
// Закраска цветом кисти clYellow, штриховки нет
Brush.Style := bsHatch;// Задали стиль кисти - Штриховая кисть (bsHatch)
Circle(500,240,100); // Нарисовали третий круг
// Штриховка - bhVertical, фон штриховки - clLime
end. // Конец программы
Как нарисовать прямоугольник в графическом окне?
Рассмотрим левый верхний угол прямоугольника. Спроектируем его на оси координат. На оси X получаем точку X1, а на оси Y получаем точку Y1. Это и есть координаты левого верхнего угла прямоугольника – (X1,Y1). Аналогично подробно объяснить про правый нижний угол – (X2,Y2). |
Чтобы нарисовать прямоугольник – надо вызвать нужную процедуру и в ней перечислить 4 параметра: X1,Y1,X2,Y2.