Контекст устройств. GDI, драйверы и устройства вывода., страница 9

В случае растровых устройств для рисования линий обычно используется алгоритм DDA (digital differential analyzer). Этот алгоритм определяет, какие пикселы на поверхности рисования должны быть подсвечены. Специализированные приложения, требующие использования нестандартных алгоритмов DDA, могут использовать функцию LineDDA.

Ломаная — линия, состоящая из нескольких отрезков, — определяется массивом точек, указатель на который передается в функцию Polyline. Функция Polyline не использует и не обновляет текущую позицию;

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

Для рисования последовательности ломаных в одном вызове функции можно использовать функцию PolyPolyline.

Кривые

Простейшей функцией для рисования кривых является функция Arc. Кривая, рисуемая этой функцией в действительности является отрезком эллипса. При его рисовании используется текущее перо. Функция АгсТо идентична функции Arc за исключением того, что она обновляет текущую позицию.

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

Функция PolyBezier рисует одну или несколько кривых Безье. Одним из ее параметров является указатель на массив точек, определяющих эти кривые. Крайняя точка одной кривой используется как начальная точка следующей кривой; следовательно, количество точек в массиве должно быть числом, кратным трем (первая точка — "3+1"), т.е. 4, 7, 10 и т.д.

Функция PolyBezierTo идентична функции PolyBezier за исключением того, что она обновляет текущую позицию.

Win32 также предусматривает комбинацию линий и кривых. Для рисования круговых диаграмм можно использовать функцию AngleArc. Для создания более сложных комбинаций линий и кривых используется функция PolyDraw.

Заполненные фигуры

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

Простейшей фигурой GDI, вероятно, является прямоугольник. Он создается при вызове функции Rectangle. Ее разновидностями являются функции RoundRect (рисует прямоугольник со скругленными углами), FillRect (заполняет прямоугольник, используя определенную кисть), FrameRect (рисует рамку прямоугольника, используя определенную кисть) и InvertRect (инвертирует прямоугольную область экрана).

Для создания других фигур используются следующие функции: Ellipse, Chord, Pie, Polygon. Для рисования набора многоугольников используется функция PolyPolygon.

Области

Области и их роль в отсечении уже упоминалась. Однако GDI предлагает и другое использование областей.

Области (см. табл. 1) можно заполнить (FillRgn, PaintRgn), обрамить (FrameRgn) или инвертировать (InvertRgn).

Области можно объединять с помощью функции CombineRgn. Для поверки, являются ли две области идентичными, используется функция EqualRgn. Область можно сместить, определив смещение в функции OffsetRgn.

Ограничивающий прямоугольник можно получить вызовом функции GetRgnBox. Для определения того, попадает ли определенная точка или прямоугольник в область, используются соответственно функции PtInRegion или RectInRegion.

Растровые изображения

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

Можно установить отдельный пиксел растрового изображения, используя функцию SetPixel. Функция GetPixel позволяет получить цвет определенного пиксела.