logo
CG

5. Понятие холста.

Canvas — холст для рисования. Для того чтобы на поверхности формы или компонента image появилась линия, окружность, прямоугольник или другой графический элемент (примитив), необходимо к свойству Canvas применить соответствующий метод. Например, оператор Forml->Canvas->Rectangle(10,10,50, 50); рисует на поверхности формы прямоугольник.

Методы вычерчивания графических примитивов

Метод

Действие

LineTo(x,y)

Рисует линию из текущей точки в точку с указанными координатами

Rectangle (x1,y1,x2, y2)

Рисует прямоугольник, x1, y1 и х2, у2 — координаты левого верхнего и правого нижнего углов прямоугольника. Цвет границы и внутренней области прямоугольника могут быть разными

FillRect (x1,y1,x2,y2)

Рисует закрашенный прямоугольник, x1, y1, х2, у2 — определяют координаты диагональных углов

FrameRect(x1,y1,x2,y2)

Рисует контур прямоугольника, x1, y1, х2, у2 — определяют координаты диагональных углов

Методы вывода графических примитивов рассматривают свойство canvas как некоторый абстрактный холст, на котором они могут рисовать (Canvas переводится как "поверхность", "холст для рисования"). Холст состоит из отдельных точек — пикселов. Положение пиксела на поверхности холста характеризуется горизонтальной (X) и вертикальной (Y) координатами. Координаты возрастают сверху вниз и слева направо (рис. 3.1). Левый верхний пиксел поверхности формы (клиентской области) имеет координаты (0, 0), правый нижний — (ciientwidth, clientHeight). Доступ к отдельному пикселу осуществляется через свойство Pixels, представляющее собой двумерный массив, элементы которого содержат информацию о цвете точек холста.

Карандаш и кисть Вид графического элемента определяют свойства Реn(карандаш) и Brush (кисть) той поверхности (Canvas), на которой рисует метод. Карандаш и кисть, являясь свойствами объекта Canvas, в свою очередь представляют собой объекты Реn и Brush. Свойства объекта Реn (табл. 3.2) задают цвет, толщину и тип линии или границы геометрической фигуры. Свойства объекта Brush (табл. 3.3) задают цвет и способ закраски области внутри прямоугольника, круга, сектора или замкнутого контура. Таблица 3.2. Свойства объекта Реn (карандаш)

Свойство

Определяет

Color

Цвет линии

Width

Толщину линии (задается в пикселах)

Style

Вид линии (psSolid— сплошная; psDash— пунктирная, длинные штрихи; psDot — пунктирная, короткие штрихи; psDashDot — пунктирная, чередование длинного и короткого штрихов; psDashDotDot — пунктирная, чередование одного длинного и двух коротких штрихов; psClear — линия не отображается (используется, если не надо изображать границу области — например, прямоугольника)

Таблица 3.3. Свойства объекта Brush (кисть)

Свойство

Определяет

Color

Цвет закрашивания замкнутой области

Style

Стиль заполнения области (bsSolid — сплошная заливка. Штриховка: bsHorizontal — горизонтальная; bsVertical — вертикальная; bsFDiagonal — диагональная с наклоном линий вперед; bsBDiagonal — диагональная с наклоном линий назад; bsCross — в клетку; bsDiagCross — диагональная клетка

Ниже приведена функция обработки события onPain, которая рисует на поверхности формы олимпийский флаг.

void__fastcall TForml::FormPaint(TObject *Sender)

{

// полотнище флага

Canvas->Pen->Width = 1;

Canvas->Pen->Color = clBlack;

Canvas->Brush->Color = clCream;

Canvas->Rectangle(30,30,150,150);

Canvas->Pen->Width =2; // ширина колец

Canvas->Brush->Style = bsClear; // чтобы круг, нарисованный

// методом Ellipse, не был закрашен

// рисуем кольца

Canvas->Pen->Color = clBlue; Canvas->Ellipse(40,40,80,80) ;

Canvas->Pen->Color = clBlack; Canvas->Ellipse(70,40,110,80);

Canvas->Pen->Color = clRed; Canvas->Ellipse(100,40,140,80);

Canvas->Pen->Color = clYellow; Canvas->Ellipse(55,65,95,105);

Canvas->Pen->Color = clGreen; Canvas->Ellipse(85,65,125,105); }