Графический инструментарий среды




Скачать 73.98 Kb.
Дата 30.08.2016
Размер 73.98 Kb.
Лекция 9. Графический инструментарий среды Builder. Классы

TCanvas, TFont, TPen, TBrush. Операции над растровыми графическими объектами, их реализация в среде Builder. Класс TBitmap.
ГРАФИЧЕСКИЙ ИНСТРУМЕНТАРИЙ СРЕДЫ
Богатство изобразительных возможностей Windows связано с так называемым дескриптором контекста графического устройства HDC (Handle Device Context) и тремя входящими в него инструментами – шрифтом, пером и кистью. В среде Builder созданы специальные классы, существенно упрощающие использование графических инструментов Windows. Для контекста это класс TCanvas, для шрифта – TFont, для пера – TPen и для кисти – TBrush. Связанные с этими классами объекты автоматически создаются для всех видимых элементов и становятся доступны программе через свойства Canvas, Font, Pen и Brush.

Свойство Canvas любого компонента - это канва, на которой можно рисовать чертёжными инструментами – пером, кистью и шрифтом. Свойство Canvas содержит в себе свойства Font, Pen, Brush, а также многочисленные методы, использующие эти свойства.

При работе с графическим инструментарием среды Builder часто используются также встроенные типы данных TPoint (точка) и TRect (четырёхугольник), определяемые следующим образом:

struct TPoint {

int x;

int y;


};

struct TRect

{

int Left;



int Top;

int Right;

int Bottom;

};

Для установки цвета того или иного участка канвы используется специальный тип TColor. Цвет в среде Builder определяется с помощью стандартной для Windows модели RGB, когда задаются интенсивности (от 0 до 255) красного, зелёного и синего цветов. Существует глобальная функция RGB, возвращающая тип TColor, и определяемая как:



TColor RGB(char r, char g, char b);

где r, g и b – значения интенсивностей красного, зелёного и синего цветов.

Для упрощения установки цвета среде Builder существует также достаточно широкий набор констант, явно задающих тот или иной цвет (например, clRed – красный, clBlue – синий и т.д.).

Процесс рисования на каком либо видимом компоненте, имеющем свойство Canvas заключается в установке свойств инструментов рисования (Font, Pen и Brush) и вызове методов, рисующих ту или иную фигуру.




СВОЙСТВА И МЕТОДЫ ГРАФИЧЕСКИХ КЛАССОВ
Свойства класса TCanvas

TBrush Brush – кисть;

TFont Font – шрифт;

TPen Pen – перо;

TRect ClipRect - определяет текущие размеры области, нуждающейся в прорисовке;

CopyMode – устанавливает способ взаимодействия отрисовываемого изображения с цветом фона;

TPoint PenPos – определяет текущее положение пера в пикселях относительно левого верхнего угла канвы;

TColor Pixels[int x][int y] – массив пикселей канвы; с помощью этого свойства все пиксели канвы представляются в виде двумерного массива точек. Изменяя их цвет можно прорисовывать изображение по отдельным точкам, например:

Canvas->Pixels[10][20]=clRed; - точка с координатами 10, 20 станет красного цвета.


Свойства класса TPen

TColor Color – цвет вычерчиваемых пером линий;

Mode – определяет способ взаимодействия линий с фоном;

int Width – толщина линий в пикселях экрана.

Style - Определяет стиль линий. Учитывается только для линий толщины 1. Толстые линии всегда сплошные.

Свойство Mode может принимать множество различных значений. Наиболее часто применяются следующие:

pmBlack – линии всегда чёрные. Свойства стиля и цвета игнорируются.

pmWhite – линии всегда белые. Свойства стиля и цвета игнорируются.

pmCopy (по умолчанию) – цвет линий определяется свойством Color пера.

Свойство Style может принимать следующие значения:

psSolid (умолч.)

psDash

psDot

psDashDot

psDashDotDot

psClear нет линий
Свойства класса TBrush

TColor Color – цвет кисти;

Style – стиль кисти;

Bitmap – содержит растровое изображение, которое будет использоваться кистью для заполнения. Если это свойство определено, свойства Color и Style игнорируются.

Свойство Style может принимать следующие значения:

bsSolid (умолч.)

bsClear нет заливки

bsBDiagonal

bsFDiagonal

bsCross

bsDiagCross

bsHorizontal

bsVertical
Свойства класса TFont

TColor Color – цвет шрифта;

Name – имя шрифта;

int Size – размер шрифта;

Style – стиль шрифта;
Основные методы класса TCanvas

Методами класса TCanvas, собственно, и осуществляется процесс рисования.

LineTo(int x, int y) – чертит линию от текущего положения пера до точки x, y.

MoveTo(int x, int y) – перемещает перо в положение x, y без вычерчивания линии.

Таким образом, последовательность команд

Form1->Canvas->Pen->Color=clGreen;

Form1->Canvas->Pen->Style= psDash;

Form1->Canvas->MoveTo(20,30);

Form1->Canvas->LineTo(50,50);

Приведёт к прорисовке на форме зелёной пунктирной линии из точки (20,30) в точку (50,50). Единожды установленные свойства пера и кисти сохраняются до тех пор, пока не будут явно изменены.

Rectangle(int x1, int y1, int x2, int y2) – вычерчивает и заполняет прямоугольник с координатами (x1, y1) – (x2, y2).

Polyline(TPoints *pp, int n) – вычерчивает пером ломаную линию по точкам, заданным в массиве pp, при этом прорисовывает n отрезков.

Polygon(TPoints *pp, int n) – вычерчивает пером многоугольник по точкам, заданным в массиве pp. Конечная точка соединяется с начальной и многоугольник заполняется кистью.

Ellipse(int x1, int y1, int x2, int y2) – чертит эллипс в охватывающем прямоугольнике (x1, y1) – (x2, y2) и заполняет его текущей кистью.

TextOut(int x, int y, char* text) – выводит текстовую строку text так, чтобы левый верхний угол прямоугольника, охватывающего текст, располагался в точке x, y.
При разработке приложений рисование может осуществляться непосредственно на форме. Кроме того, в среде Builder имеются специальные компоненты, упрощающие работу с изображениями, например Image (страница Additional) и PaintBox (страница System). Они служат для размещения на форме одного из трёх поддерживаемых средой типов изображений: растровой картинки, пиктограммы или метафайла. В их свойстве Canvas содержится канва, с помощью которой программа может отредактировать растровое изображение.

ОПЕРАЦИИ НАД ГРАФИЧЕСКИМИ ОБЪЕКТАМИ
В графическом инструментарии Windows существует широкий спектр возможностей обрабатывать изображения с целью достижения различных эффектов (например, прозрачности). Все эти эффекты сводятся, в принципе, к 4 операциям – инвертированию, объединению изображений операцией AND, объединению изображений операцией OR и объединению изображений операцией XOR. Логическая интерпретация этих операций приведена в таблице:


A

B

not A
A and B
A or B
A xor B

0

0

1

0

0

0

0

1

1

0

1

1

1

0

0

0

1

1

1

1

0

1

1

0

В случае, когда данные операции применяются к монохромным чёрно-белым изображениям, каждый пиксель чёрного цвета кодируется как 0, каждый пиксель белого цвета кодируется как 1. Если же данные операции применяются к полутоновым и цветным изображениям, то цвет каждого пикселя кодируется числом размером от 1 до 4 байт, и в этом случае операции понимаются побитно; например, если инвертируется синий цвет модели RGB, то это делается следующим образом:

исходный цвет – 00000000 00000000 11111111

результат инвертирования - 11111111 11111111 00000000

то есть получится пиксель жёлтого цвета.

В среде Builder данные операции реализуются с помощью специального метода класса TCanvas:

CopyRect(TRect Dest, TCanvas Canvas, TRect Sourse);

Данная функция копирует участок изображения Sourse канвы Canvas (источника) в участок Dest текущей канвы. При этом разнообразные специальные эффекты достигаются с помощью свойства канвы CopyMode. Оно может иметь одно из следующих значений (основные):

cmSrcCopy – копирует изображение источника на канву;

cmSrcAnd – объединяет изображения источника и канвы операцией AND;

cmSrcErase – инвертирует изображение на канве и объединяет его с источником;

cmSrcInvert - объединяет изображения источника и канвы операцией XOR;

cmSrcPaint - объединяет изображения источника и канвы операцией OR;

cmNotSrcCopy – копирует на канву инверсное изображение источника;

cmNotSrcErase - объединяет изображения источника и канвы операцией OR и

инвертирует полученное;


Аналогичные эффекты можно также получать при рисовании линий, что достигается различными значениями свойства пера Mode:

pmNot – инверсия цвета фона;

pmXor – объединение цветов пера и фона операцией XOR;

pmNotXor – инверсия объединения цветов пера и фона операцией XOR;




КЛАСС TBitmap

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



  • объявить указатель на эту переменную:

Graphics::TBitmap *b1;

При этом с помощью операции разрешения области действия :: следует обязательно явно указать имя класса Graphics, потомком которого является класс TBitmap (как в примере).



  • выделить память под переменную типа TBitmap с помощью оператора new:

b1=new Graphics::TBitmap;

  • задать размер изображения – высоту и ширину:

b1->Height=15;b1->Width=15;

  • задать глубину цветовой палитры – свойство PixelFormat, которое может принимать значения pf1bit, pf8bit, pf16bit, pf24bit, pf32bit. Цифра при этом обозначает размер переменной, кодирующей цвет каждого пикселя.

b1->PixelFormat=pf16bit;

После этого переменная b1 становиться доступной для рисования в ней изображений посредством методов её свойства Canvas.

b1->Canvas->Rectangle(3,3,10,10);

Класс TBitmap содержит также специальные методы LoadFromFile(“Filename”) и

SaveToFile(“Filename”), позволяющие загружать изображение из файла и сохранять его в файл типа *.bmp (в новых версиях среды есть также возможность загружать файлы других форматов). Если изображение загружается из файла, то устанавливать его размеры и глубину цветов нет необходимости (они определяются автоматически форматом файла).

Вывод сформированного в памяти изображения на визуальный компонент можно осуществить с помощью метода канвы Draw(int x, int y, Graphic), который прорисовывает графический объект Graphic так, чтобы его верхний левый угол расположился в точке x, y. Пример:

Form1->Canvas->Draw(20, 20, b1);

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



Form1->Canvas->Brush->Bitmap=b1;

ЗАДАНИЕ К ЛЕКЦИИ 12


  1. Нарисовать графики функции y=x2+bx вблизи начала координат при нескольких различных значениях b, выделив их различными цветами или стилями линий.

  2. Нарисовать фигуру типа «светофор». Обеспечить «зажигание» и «потухание» для его трёх «лампочек» по нажатию на соответствующие клавиши или с течением времени.


База данных защищена авторским правом ©infoeto.ru 2022
обратиться к администрации
Как написать курсовую работу | Как написать хороший реферат
    Главная страница