|
Программирование >> Вывод графики
земпляр Pen или Brush с нужным цветом и другими свойствами, и потом передаете методам рисования, которые их требуют. Если вы ранее программировали с использованием GDI, то должны были обратить внимание на то, что перья в GDI+ используются несколько иначе. В GDI нормальной практикой б1ло врезывать функцию Windows API SelectObject(), которая в действительности ассоциировала перо с контекстом устройства. Затем это перо применялось во всех операциях рисования, которым оно было необходимо, до тех пор, пока вы не сообщали контексту устройства о том, что нужно использовать другое перо, снова врезывая SelectObject(). Тот же принцип применяется в отношении кистей и других объектов - таких как шрифты и битовые изображения. В GDI+ разработчики Microsoft предпочли модель без сохранения состояния, не предполагающую применение пера или других вспомогательных объектов по умолчанию. Вместо этого при каждом вызове метода передается конкретный вспомогательный объект. Кисти GDI+ включает несколько разных видов кистей - больше, чем мы в состоянии описать в настоящей главе, поэтому в данном разделе мы только объясним простейшие из них, чтобы дать вам представление об основных принципах. Каждый тип кисти представлен экземпляром класса, унаследованного от абстрактного класса System. Drawing.Brush. Простейшая кисть, System.Drawing.SolidBrush, означает, что область должна быть заполнена сплошным цветом: Brush solidBeigeBrush = new SolidBrush(Color.Beige); Brush solidFunnyOrangyBrownBrush = new SolidBrush(Color.FromArgb(255,155,100)); В качестве альтернативы, если нужна кисть одного из Web-безопасных цветов, ее можно сконструировать, используя другой класс - System.Drawing.Brushes. Brushes - это один из тех классов, экземпляры которого никогда не создаются (у него есть приватный конструктор, который не позволит это сделать). Он просто включает большое число статических свойств, каждое из которых возвращает кисть заданного цвета. Brushes можно использовать следующим образом: Brush solidAzureBrush = Brushes.Azure; Brush solidChocolateBrush = Brushes.Chocolate; Следующий уровень сложности представляет штриховая кисть (hatch brush), которая заполняет область, рисуя некоторый шаблон. Тип этой кисти продуман более глубоко, поэтому он находится в пространстве имен Drawing2D и представлен классом System.Drawing.Drawing2D.HatchBrush. Класс Brushes ничем не может помочь в создании штриховых кистей - их нужно конструировать явно, указывая стиль штрихования и два цвета - цвет переднего плана и цвет фона (цвет фона можно опустить, при этом по умолчанию применяется черный). Стиль штрихования выбирается из перечисления System.Drawing.Drawing2D.HatchStyle. Доступен выбор из огромного числа значений HatchStyle (в документации SDK можно увидеть полный список). Чтобы дать общее представление, упомянем часто используемые стили: ForwardDiagonal, Cross, DiagonalCross, SmallConfetti и ZigZag. Ниже показаны примеры конструирования штриховых кистей. Brush crossBrush = new HatchBrush(HatchStyle.Cross, Color.Azure); Фоновый цвет для CrossBrush - чернхй Brush brickBrush = new HatchBrush(HatchStyle.DiagonalBrick, Color.DarkGoldenrod, Color.Cyan); Набор кистей GDI ограничивался только сплошными и штриховыми. GDI+ добавляет к ним еще пару дополнительных кистей: □ System.Drawing.Drawing2D.LinearGradientBrush заполняет область цветом, плавно изменяемым по экрану; □ System.Drawing.Drawing2D.PathGradientBrush похожа на предыдущую, но здесь цвет меняется вдоль пути вокруг заполняемой области. Следует отметить, что с помощью последних двух кистей можно создавать впечатляющие эффекты при умелом их использовании. Перья В отличие от кистей перья представлены одним классом - System.Drawing.Pen. Однако перо - несколько более сложное понятие, нежели кисть, поскольку для него должна указываться толщина линии (в пикселях), а также - для толстых линий - способ заполнения области внутри линии. Для перьев также можно задавать множество других свойств, которые не описаны в настоящей главе, включая упомянутое ранее свойство Alignment. Это свойство определяет, где по отношению к границам фигуры должна быть проведена линия, а также какую форму должен иметь ее конец. Пространство внутри линии может быть залито сплошным цветом либо заполнено с помощью кисти. Поэтому экземпляр Pen может содержать ссылку на экземпляр Brush. Это довольно-таки мощная технология, поскольку означает, что вы можете рисовать линии, закрашенные, скажем, штриховой или градиентной кистью. Существует четыре разных способа сконструировать экземпляр Pen вручную. Можно сделать это, передав цвет либо кисть. Оба эти конструктора создают перо шириной в один пиксель. В качестве альтернативы можно передать цвет или кисть и дополнительно значение типа float, представляющее ширину пера (здесь применяется float на случай работы Graphics в единицах измерения, отличных от пикселей - таких как миллиметры или дюймы). Например, сконструировать перья можно следующим образом: Brush brickBrush = new HatchBrush(HatchStyle.DiagonalBrick, Color.DarkGoldenrod, Color.Cyan); Pen solidBluePen = new Pen(Color.FromArgb(0,0,255)); Pen solidWideBluePen = new Pen(Color.Blue, 4); Pen brickPen = new Pen(brickBrush); Pen brickWidePen = new Pen(brickBrush, 10); Вдобавок, для быстрого создания перьев можно применить класс System.Drawing. Pens, который, подобно классу Brushes, содержит множество готовых перьев. Все эти перья имеют ширину в один пиксель и цвета из числа безопасных к Web. Это позволяет конструировать перья вот так: Pen solidYellowPen = Pens.Yellow; Рисование фигур и линий Первая часть главы почти завершена, и вы ознакомились со всеми базовыми классами и объектами, необходимыми для рисования на экране фигур и тому подобного. Этот раздел мы начнем с обзора некоторых методов рисования, представленных в классе Graphics, а также рассмотрим краткий пример, иллюстрирующий использование нескольких кистей и перьев. System.Drawing.Graphics включает большое количество методов, которые позволяют рисовать разнообразные линии, контурные и сплошные фигуры. Опять-таки отметим, что их слишком много, чтобы можно было привести здесь полный список, но в табл. 33.4 перечислены некоторые из них, просто чтобы дать вам представление обо всем разнообразии фигур, которые можно нарисовать. Прежде чем покончить с рисованием простых объектов, в этом разделе мы подведем итог, рассмотрев простой пример, демонстрирующий различные виды визуальных эффектов, которые можно создать с помощью кистей. Таблица 33.4. Некоторые методы рисования класса System.Drawing.Graphics Метод Типичные параметры Что рисует DrawLine DrawRectangle DrawEllipse FillRectangle FillEllipse DrawLines DrawBezier DrawCurve DrawArc DrawClosedCurve DrawPie FillPie DrawPolygon Перо, начальная и конечная точки Одиночная прямая линия. Перо, положение и размер Перо, положение и размер Кисть, положение и размер Кисть, положение и размер Перо, массив точек Перо, четыре точки Перо, массив точек Перо, прямоугольник, два угла Перо, массив точек Перо, прямоугольник, два угла Кисть, прямоугольник, два угла Перо, массив точек Контур прямоугольника. Контур эллипса. Сплошной прямоугольник. Сплошной эллипс. Серия линий, соединяющую каждую точку со следующей в массиве. Гладкая кривая через две конечные точки с остальными двумя точками, управляющими ее формой. Гладкая кривая через все точки. Сегмент круга между заданными углами. Подобно DrawCurve, но с прямой линией, замыкающей кривую. Клиноподобный контур внутри прямоугольника. Сплошная клиноподобная область внутри прямоугольника. Подобно DrawLines, но также с соединением первой и последней точек для замыкания фигуры. Пример называется ScrollMoreShapes и, по сути, является усовершенствованием ScrollShapes. Помимо прямоугольника и эллипса мы добавим толстую линию и закрасим фигуры различными кистями. Мы уже изучили базовые принципы рисования, поэтому код будет говорить сам за себя. Во-первых, поскольку будут применены новые кисти, понадобится включить пространство имен System.Drawing.Drawing2D: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Text; using System.Windows.Forms; Далее добавим в наш класс Form1 несколько дополнительных полей, которые будут хранить информацию о месте, где должны быть нарисованы фигуры, а также об используемых перьях и кистях:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |