Лекции по курсу «Программирование» Лекция 9. Графический инструментарий среды Builder.

advertisement
Лекции по курсу
«Программирование»
Лекция 9. Графический
инструментарий среды Builder.
Классы TСanvas, TFont, TPen, TBrush.
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Графический инструментарий среды
Свойства объектов Canvas, Font, Pen и Brush
Изобразительные возможности Windows связаны с
понятием
дескриптора
контекста
графического
устройства HDC (Handle Device Context)
и тремя
инструментами – шрифтом, пером и кистью. В среде
Builder созданы специальные классы, упрощающие
использование графических инструментов Windows:
TCanvas (для контекста), TFont (для шрифта), TBrush
(для кисти), TPen (для пера). Связанные с этими
классами объекты автоматически создаются для всех
видимых элементов и доступны для программиста.
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Графический инструментарий среды
Типы данных TPoint и TRect
При работе с графическим инструментарием среды
Builder часто используются также встроенные типы
данных TPoint, и TRect, определённые как:
struct TPoint
{
int x;
int y;
};
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Графический инструментарий среды
Типы данных TPoint, и TRect - продолжение
struct TRect
{
int Left;
int Top;
int Right;
int Bottom;
};
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Графический инструментарий среды
Тип данных TColor
Тип данных TСolor используется для задания цвета того
или иного участки канвы. Цвет в среде Builder задаётся
с помощью стандартной для Windows модели RGB, когда
задаются интенсивности (от 0 до 255) красного,
зелёного и синего цветов.
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Графический инструментарий среды
Пример использования функции RGB
TColor col;
char r=0, g=0, b=200;
Интенсивность
синего цвета
col = RGB(r, g, b);
Интенсивность
красного цвета
Цвет-результат
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Интенсивность
зелёного цвета
Графический инструментарий среды
Задание цвета с помощью встроенных констант
Для упрощения задания цвета в среде Builder
существует встроенный набор констант, явно задающих
тот или иной цвет, например:
clRed – красный,
clBlue – синий,
clGreen – зелёный,
и т.д.
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Свойства и методы графических
классов
Свойства класса TCanvas
TBrush Brush – кисть;
TFont Font – шрифт;
TPen Pen – перо;
TRect ClipRect – определяет
прорисовываемой области;
CopyMode – устанавливает
изображения с цветом фона;
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
текущие
способ
размеры
взаимодействия
Свойства и методы графических
классов
Свойства класса TCanvas (продолжение)
TPoint PenPos – определяет текущее положение пера в
пикселях относительно левого верхнего угла канвы;
TColor Pixels[int x][int y] – массив пикселей канвы; с
помощью
этого
свойства
все
пиксели
канвы
представляются в виде двумерного массива точек.
Изменяя их цвет можно прорисовывать изображение по
отдельным точкам, например:
Canvas->Pixels[10][20]=clRed; - точка с координатами
10, 20 станет красного цвета.
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Свойства и методы графических
классов
Свойства класса TPen
TColor Color – цвет вычерчиваемых пером линий;
Mode – определяет способ вычерчивания пером линий с
фоном;
int Width – толщина линий в пикселях экрана.
Style - определяет стиль линий, учитывается только для
линий толщины
сплошные.
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
1.
Более
толстые
линии
всегда
Свойства и методы графических
классов
Значения свойства Mode (класс TPen)
Свойство Mode может принимать множество различных
значений. Наиболее часто применяются следующие:
pmBlack – линии всегда чёрные, свойства стиля и цвета
игнорируются.
pmWhite – линии всегда белые, свойства стиля и цвета
игнорируются.
pmCopy (по умолчанию) – цвет линий определяется
свойством Color пера.
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Свойства и методы графических
классов
Значения свойства Style (класс TPen)
Свойство Style может принимать следующие значения:
psSolid (умолч.)
psDash
psDot
psDashDot
psDashDotDot
psClear
нет линий
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Свойства и методы графических
классов
Свойства класса TBrush
TColor Color – цвет кисти;
Style – стиль кисти;
Bitmap – содержит растровое изображение, которое
будет использоваться кистью для заполнения. Если это
свойство
определено,
свойства
Color
и
Style
игнорируются.
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Свойства и методы графических
классов
Значения свойства Style (класс TBrush)
Свойство Style может принимать следующие значения:
bsSolid (умолч.)
bsClear
нет заливки
bsBDiagonal
bsFDiagonal
bsCross
bsDiagCross
bsHorizontal
bsVertical
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Свойства и методы графических
классов
Свойства класса TFont
TColor Color – цвет шрифта;
Name – имя шрифта;
int Size – размер шрифта;
Style – стиль шрифта;
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Свойства и методы графических
классов
Основные методы класса TCanvas
LineTo(int x, int y) – чертит линию от текущего
положения пера до точки x, y.
MoveTo(int x, int y) – перемещает перо в положение x, y
без вычерчивания линии.
Rectangle(int x1, int y1, int x2, int y2) – вычерчивает и
заполняет прямоугольник (x1, y1) – (x2, y2).
Polyline(TPoints *pp, int n) – вычерчивает пером ломаную
линию по точкам, заданным в массиве pp, при этом
прорисовывает n отрезков.
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Свойства и методы графических
классов
Основные методы класса TCanvas (продолжение)
Polygon(TPoints *pp, int n) – вычерчивает пером
многоугольник по точкам, заданным в массиве pp.
Конечная
точка
соединяется
с
начальной
и
многоугольник заполняется кистью.
Ellipse(int x1, int y1, int x2, int y2) – чертит эллипс в
охватывающем прямоугольнике (x1, y1) – (x2, y2) и
заполняет его текущей кистью.
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Свойства и методы графических
классов
Основные методы класса TCanvas (продолжение)
TextOut(int x, int y, char* text) – выводит текстовую
строку text так, чтобы левый верхний угол
прямоугольника, охватывающего текст, располагался в
точке x, y.
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Свойства и методы графических
классов
Компоненты для рисования при разработке приложений
При
разработке
приложений
рисование
может
осуществляться непосредственно на форме. Кроме того,
в среде Builder имеются специальные компоненты,
упрощающие работу с изображениями, например Image
и PaintBox.
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Операции над графическими объектами
4 основных операции над растровыми графическими объектами
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
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 байт. В этом случае операции понимаются побитно.
Пример инвертирования:
Исходный цвет: 00000000 00000000 11111111 (синий)
Инвертирование: 11111111 11111111 00000000 (жёлтый)
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Операции над графическими объектами
Реализация операций над графическими объектами в среде Builder
В среде Builder данные операции реализуются с помощью
специального метода класса TCanvas:
CopyRect(TRect Dest, TCanvas Canvas, TRect Sourse);
Данная функция копирует участок изображения Source
канвы Canvas (источника) на участок Dest текущей канвы.
При этом разнообразные спец. эффекты достигаются с
помощью свойства канвы CopyMode.
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Операции над графическими объектами
Основные значения свойства CopyMode
cmSrcCopy – просто копирует изображение источника на
канву;
cmSrcAnd – объединяет изображения источника и канвы
операцией AND;
cmSrcErase – инвертирует изображение на канве и
объединяет его с источником;
cmSrcInvert – объединяет изображения источника и канвы
операцией XOR;
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Операции над графическими объектами
Основные значения свойства CopyMode (продолжение)
cmSrcPaint – объединяет изображения источника и канвы
операцией OR;
cmNotSrcCopy – копирует на канву инверсное
изображение источника;
cmNotSrcErase – объединяет изображение источника и
канвы операцией OR и инвертирует полученное.
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Операции над графическими объектами
Основные значения свойства Mode пера
pmNot – инверсия цвета фона;
pmXor – объединение цветов пера и фона операцией
XOR;
pmNotXor – инверсия объединения цветов пера и фона
операцией XOR;
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Класс TBitmap
Последовательность действий при создании переменной класса
TBitmap
Для того, чтобы создать переменную класса TBitmap
необходимо выполнить следующие действия:
1. Объявить указатель на переменную
Graphics::TBitmap *b1;
2. Выделить память под переменную
b1=new Graphics::TBitmap;
3. Задать размеры изображения
b1->Height=15;b1->Width=15;
4. Задать глубину цветовой палитры
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Класс TBitmap
Последовательность действий при создании переменной класса
TBitmap (продолжение)
4. Задать глубину цветовой палитры
b1->PixelFormat=pf16bit;
Возможные значения свойства PixelFormat:
pf1bit,
pf8bit,
pf16bit,
pf24bit,
pf32bit
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Класс TBitmap
Пример рисования изображения в переменной b1
b1->Canvas->Rectangle(3,3,10,10);
Класс TBitmap содержит также специальные методы
LoadFromFile(“Filename”)
и
SaveToFile(“Filename”),
позволяющие загружать изображение из файла и
сохранять его в файл.
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Класс TBitmap
Пример вывода изображения в переменной b1 на видимый
компонент
Form1->Canvas->Draw(20, 20, b1);
Переменные класса TBitmap также могут использоваться
для задания способа заливки, посредством установки
свойства Bitmap кисти. Пример:
Form1->Canvas->Brush->Bitmap=b1;
© В.М. Гриняк, доц. каф. ИСКТ ВГУЭС
Download