Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
UMK_konspekt_TP_4_a4_2.doc
Скачиваний:
16
Добавлен:
29.09.2019
Размер:
1.57 Mб
Скачать

31. Технология программирования графики

31.1. Графическая подсистема оболочек Win32/64

На программном уровне для платформы Win32/64 выделяют четыре вида графических интерфейсов для пользовательских программ:

  1. Graphics Device Interface (GDI).

  2. Open Graphics Library (OpenGl).

  3. Direct3D.

  4. DirectDraw.

GDI представляет собой основной интерфейс операционной системы для предоставления традиционного интерфейса приложениям Windows. Этот интерфейс использует аппаратно-независимую подсистему растрового формирования изображений на поверхности экрана, которая наследуется в малоизменяемом виде от версии к версии Windows.

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

Direct3D – интерфейс управления графическим акселератором на абстрактном уровне, аналогичный по идее доступа OpenGl, но оптимизированный для платформы Windows и реализованный по технологии COM (Component Object Model). Он предоставляет программисту возможность работать с высокоуровневыми объектами графической подсистемы:

  • формировать содержимое буфера выполнения;

  • выбирать и устанавливать ракурс для отрисовки трехмерных графических сцен;

  • управлять виртуальным источником сета;

  • задавать и менять текстуры графических объектов и т.д.

DirectDraw является низкоуровневым и наиболее быстрым интерфейсом доступа к видеоадаптеру. Он предоставляет минимальный набор интерфейсных элементов для работы на программном уровне с графическим акселератором в обход драйвера:

  • первичный буфер;

  • вторичный буфер;

  • Z-буфер;

  • палитра.

Интерфейсы OpenGl, Direct3D и DirectDraw предоставляют расширенный по сравнению с GDI набор интерфейсных функций и используются в основном для разработки мощных графических приложений.

Традиционный оконный интерфейс операционных систем семейства Windows построен на основе GDI. Graphics Device Interface является базисом формирования пользовательского интерфейса для большинства разрабатыва6емых приложений. Рассмотрим более подробно его модель, используемую программистами в среде Borland Delphi.

31.2. Графические средства Delphi

Рассматриваемый графический интерфейс базируется на применении класса TCanvas, который является свойством многих визуальных компонентов среды Delphi.

Если у компонента канва (свойство типа TCanva) отсутствует, то на его поверхности рисовать нельзя. На поверхности компонентов, имеющих канву, можно печатать тексты, рисовать пером, красить кистью и отображать картинки.

Канва предоставляет «холст» (контекст графического устройства GDI), инструменты для рисования (перо, кисть, шрифт), а так же набор функций по изображению рисунков и типовых геометрических фигур типа эллипса, линии и т.п. Канвой обладают такие компоненты, как форма (TForm), наследники класса TgraphicControl – метка (TLabel), панель для рисования (TPaintBox) и др.

Шрифт инкапсулируется классом TFont. В нём задаются только горизонтальные шрифты (для других вариантов нужно непосредственно применять API-функции Windows). Основные свойства TFont:

Style – особенности начертания шрифта: жирный (fsBold), курсив (fsItalic), подчёркнутый (fsUnderLine), перечёркнутый (fsStrikeOut). Каждый из этих вариантов совместим с другим, то есть шрифт может быть одновременно и жирным, и подчёркнутым, и т.д.

Color – задаёт любой из допустимых в системе цветов в интервале TColor = - (COLOR_ENDCOLORS+1)..$2FFFFFF. Для прямого определения номера цвета по его составляющим красного, зелёного и синего компонентов используется функция RGB (R, G, B). Интенсивности R, G и B задаются числами в интервале 0..255. Пример: Color := RGB (0, 127, 255). Для 16 стандартных цветов используются константы с префиксом cl. Например константа clBlack определяет чёрный цвет.

Pitch – способ установки ширины знаков шрифта: моно-ширинный (fpFixed), с переменной шириной (fpVariable), когда на знак «i» выделяется меньшая ширина, чем на знак «w», и по определённому начертанию шрифта (fpDefault).

Height – высота шрифта в пикселях.

Handle – дескриптор шрифта.

PixelsPerInch – число точек на дюйм в контексте экрана. Изменять это свойство не рекомендуется, чтобы не искажать изображение.

Size – размер шрифта в пунктах, связанный с PixelsPerInch: Size=Height*72/PixelsPerInch.

По умолчанию шрифт устанавливается системным (в частности, чёрного цвета).

Перо (класс TPen) задаёт свойства вычерчиваемых линий с помощью следующих свойств:

Color – цвет пера (аналогично цвету шрифта).

Mode – одна из 16 стандартных операций Windows для взаимодействия пера с поверхностью. Обычно задается константой с префиксом pm. Например константа pmMerge задает режим суммирования цветов пера и экрана.

Style – один из 7 стандартных для Windows стилей изображения линии. Задается константой с префиксом ps. Например константа psSolid задает сплошную линию.

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

Handle – дескриптор пера.

По умолчанию перо имеет единичную толщину, чёрный цвет и сплошное изображение. При толщине, отличной от единицы, линия может иметь только сплошной стиль.

Кисть (класс TBrush) задаёт способ закраски замкнутых фигур с помощью следующих свойств:

Color – цвет кисти.

Style – задаёт один из 8 стилей кисти. Определяется константой с префиксом bs. Например константа bsSolid задаёт сплошную закраску.

BitMap – задаваемая программистом битовая карта для закраски поверхности определённым орнаментом. Если это свойство задано, то Color и Style игнорируются.

Handle – дескриптор кисти.

По умолчанию кисть имеет белый цвет при сплошной закраске.

Канва (класс TCanvas) для рисования включает в себя шрифт (свойство Font), перо (свойство TPen), кисть (свойство TBrush) и дискриптор (свойство Handle). На поверхности канвы можно рисовать любым из следующих способов:

  1. Рисовать сложные графические изображения по отдельным точкам с помощью свойства Pixels [X, Y: Integer]: TColor.

Пример нанесения красной точки в позиции (5, 5):

Pixelsх[5,5] := RGB(255, 0, 0).

  1. Помещать готовые графические изображения, задаваемые полем Graphic.

  2. Проводить линии и изображать простые геометрические фигуры текущим пером. Если геометрическая фигура замкнутая, то после её рисования её внутренность закрашивается текущей кистью.

Для «сбрасывания» текущих установок шрифта, пера и кисти (установки их значений по умолчанию) используется метод Refresh.

При изменении канвы (то есть при любом рисовании) возбуждаются события OnChange и OnChanging (соответственно до начала изменений и по их завершению).

Рассмотрим некоторые часто используемые методы для рисования и вывода текстов на поверхность канвы:

BrushCopy (const Dest: TRect; BitMap: TBitMap; const Sourse: TRect; Color: TColor); - копирование прямоугольника Sourse из битового изображения BitMap в прямоугольник Dest канвы с изменением цвета Color на цвет кисти Brush.Color. Для рисования «прозрачной» картины цвет кисти фона заменяется на цвет битового изображения, являющийся в нём фоновым или наиболее частым.

CopyRect (const Dest: TRect; Canvas: TCanvas; const Sourse: TRect); - копирование прямоугольника Sourse из канвы в прямоугольник Dest в области самого объекта.

Drow (X, Y: Integer; Graphic: TGraphic); - отрисовка графического объекта Graphic с заданными координатами его левого верхнего угла.

Polygon (const Points: array of TPoint); - отрисовка многоугольника с вершинами в указанных точках.

StretchDraw (const Rect: TRect; Graphic: TGraphic); - отрисовка в прямоугольнике Rect объекта Graphic с его масштабированием к размеру прямоугольника Rect.

TextOut (X, Y: Integer; const Text: String); - вывод текста Text с заданными координатами его верхнего левого угла (X,Y).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]