Лекции по курсу «Программирование» Лекция 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; © В.М. Гриняк, доц. каф. ИСКТ ВГУЭС