1.3. Рисование линий, кривых и фигур
Font и SolidBrush — это графические примитивы, используемые дл управления форматом изображения, выводимого в окно формы. Но это не единственные примитивы, которые GDI+ предоставляет в ваше распоряжение. Вот еще: Графические примитивы GDI+
Класс |
Описание |
||
Bitmap |
Представляет растровые изображения |
||
Font |
Определяет атрибуты шрифта: размер, гарнитуру и т. д |
||
HatchBrush |
Определяет заливку решетчатым узором |
||
LinearGradientBrush |
Определяет заливку с линейным градиентом |
||
Реn |
Определяет внешний вид линий и кривых |
||
SolidBrush |
Определяет заливку сплошным цветом |
||
TextureBrush |
Определяет заливку с использованием растрового изображения |
Некоторые из этих классов определены в пространстве имен System.Drawing, другие — в пространстве имен System.Drawing.Drawing2D (NB). Перья, представленные экземплярами класса Реп, управляют внешним видом линий и кривых. Объект Font задают внешний вид текста, тогда как кисти, представленные объектами классов HatchBrusb, LinearGradientBrush, SolidBrush и TextureBrusb определяют виды заливки. Приведенный ниже ме-
тод OnPaint рисует прямоугольники трех стилей: 1) без заливки, 2) закрашенный красным цветом и 3) с градиентной заливкой, переходящей из красного в синее:
protected override void OnPaint (PaintEventArgs e)
{
Pen pen = new Pen (Color.Black);
// Нарисовать пустой прямоугольник.
e.Graphics.DrawRectangle(pen, 10, 10, 390, 90);
// Нарисовать прямоугольник со сплошной заливкой.
SolidBrush solid = new SolidBrush (Color.Red);
e.Graphics.FilLRectangle (solid, 10, 110, 390, 90);
e.Graphics.DrawRectangle (pen, 10, 110, 390, 90);
// Нарисовать прямоугольник с градиентной заливкой.
Rectangle rect = new Rectangle (10, 210, 390, 90);
LinearGradientBrush gradient = new LinearGradientBrush (rect, Color.Red,
Color.Blue, LinearGradientMode.Horizontal);
e.Graphics.FillRectangle (gradient, rect);
e.Graphics.DrawRectangle (pen, rect);
}
1.4. Координаты и преобразования
При вызове DrawRectangle и FillRectangle вы определяете координаты, указывающие положение левого верхнего угла прямоугольника, и расстояния, задающие его ширину и высоту. По умолчанию расстояния измеряются в пикселах. Координаты задают расположение в двумерной системе, начало которой располагается в левом верхнем углу формы, а оси х и у направлены вправо и вниз соответственно. Систему координат и единицы измерения, применяемые по умолчанию, можно настроить, добавив в программу несколько простых операторов.Методам Graphics передаются глобальные координаты. По пути на экран они дважды преобразуются: сначала транслируются в страничные координаты, определяющие положение на логической поверхности для рисования, а затем страничные координаты преобразуются в координаты устройства, задающие физическое положение на экране.Для трансляции глобальных координат в страничные GDI+ использует матрицу преобразования. Матрицы преобразования — это математические объекты, позволяющие преобразовывать пары координат х-у из одной системы координат в другую. Они повсеместно используются в компьютерной графике и подробно описаны в соответствующей литературе.
Матрицы преобразования, применяемые GDI+ для пересчета координат, являются экземплярами класса System.Drawing.Drawing2D.Matrix. Каждый объект Graphics содержит объект Matrix, доступ к которому осуществляется через свойство Transform. По умолчанию используется единичная матрица (identity matrix) — этот математический термин обозначает матрицу, не производящую преобразований (так же, как умножение числа на1 дает то же число). Вы можете изменять матрицу преобразования, а значит, и способ пересчета глобальных координат в страничные, одним из двух способов. Первый — инициализировать экземпляр класса Matrix значениями, задающими желаемое преобразование, и присвоить его свойству Transform. Это прекрасный способ для экспертов по линейной алгебре, но простые смертные, вероятно, предпочтут иное: зададут преобразование координат таких методов Graphics, как TranslateTransform и RotateTransform. TranslateTransform перемещает начало системы координат на указанные расстояния по осям х и у. RotateTransform поворачивает оси х и у.Оба метода позволяют поместить начало координат в любую точку и повернуть оси х и у на любой угол. TranslateTransform и RotateTransform — это мощные инструменты перемещения координатной системы и ориентации ее осей. Родственный метод ScaleTransform позволяет еще и масштабировать координаты. При использовании преобразований системы координат следует иметь в виду, что порядок их применения влияет на результаты, В предыдущем примере система координат была сначала перемещена, а затем повернута. Начало отсчета переместилось в точку (100, 100), после чего был выполнен поворот на -45° (против часовой стрелки). Если сначала выполнить поворот, а потом перемещение, прямоугольник появится в другом
месте, так как перемещение произойдет вдоль уже повернутых осей. Это можно представить себе так: если вы, стоя в комнате, пройдете несколько шагов вперед, а затем повернетесь, то окажетесь не в том же месте, где
вы были бы, если бы сначала повернулись, а потом пошли. Тот же принцип применим и к матричным преобразованиям.