- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания C# для профессионалов. Том II - Симон Робинсон
Шрифт:
Интервал:
Закладка:
Кисти
GDI+ имеет несколько различных видов кистей, мы объясним простейшие из них, чтобы знать о принципах. Каждый тип кисти представлен экземпляром класса, производным из System.Drawing.Brush (этот класс является абстрактным, поэтому нельзя создать экземпляры объектов Brush как только объекты производных классов). Простейшая кисть указывает, что область должна быть заполнена сплошным цветом. Этот вид кисти представлен экземпляром класса System.Drawing.SolidBrush, который можно создать таким образом:
Brush solidBeigeBrush = new SolidBrush(Color.Beige);
Brush solidFunnyOrangyBrownBrush = new SolidBrush(Color.FromArgb(255, 155, 100)
Альтернативно, если кисть является одним из именованных цветов Интернета, то можно создать кисть более просто с помощью другого класса System.Drawing.Brushes. Brushes является одним из тех классов, экземпляры которых реально никогда не создаются (он имеет закрытый конструктор, чтобы не дать возможности это сделать). Большое число статических свойств возвращает кисть специального цвета. Brushes используется так:
Brush solidAzureBrush = Brushes.Azure;
Brush solidChocolateBrush = Brushes.Chocolate;
Следующий уровень сложности представляет штриховая кисть, которая заполняет область, рисуя некоторый шаблон-узор. Этот тип кисти находится в пространстве имен Drawing2D, представленном классом System.Drawing.Drawing2D.HatchBrush. Класс Brushes не сможет помочь в случае штриховой кисти, необходимо будет создать одну из них явно, задавая стиль штриховки и два цвета — цвет переднего плана и цвет фона (но можно опустить цвет фона, в таком случае по умолчанию используется черный цвет). Стиль штриховки задают с помощью перечисления System.Drawing.Drawing2D.HatchStyle. Существует большое число доступных значений HatchStyle, поэтому проще всего обратиться к документации MSDN для получения полного списка. Типичными стилями, например, являются ForwardDiagonal, Cross, DiagonalCross, SmallConfetti и ZigZag. Ниже приведены примеры создания штриховой кисти
Brush crossBrush = new HatchBrush(HatchStyle.Cross, Color.Azure);
// фоновый цвет для CrosstBrush будет черный
Brush brickBrush = new HatchBrush(HatchStyle.DiagonalBrick, Color.DarkGoldenrod.Color.Cyan);
Сплошные и штриховые кисти — единственные кисти, доступные в GDI. GDI+ добавляет пару новых стилей кисти:
□ Кисть System.Drawing.Drawing2D.LinearGradientBrush заполняет область цветом, который изменяется на экране.
□ Кисть System.Drawing.Drawmg2D.PathGradientBrush действует аналогично, но в этом случае цвет меняется вдоль кривой в закрашиваемой области. Мы не будем рассматривать здесь эти кисти. Отметим только, что обе они могут создать интересные эффекты при аккуратном использовании. Пример Bezier из главы 9 использует кисть с линейным градиентом для закрашивания фона окна.
Перья
В отличие от кистей перья представлены только одним классов — System.Drawing.Pen. Перо в действительности является немного более с южным, чем чисть, так как оно должно указывать толщину линий (ширину в пикселях), а для широкой линии,— как закрашивать область внутри нее. Перья могут также определять ряд других свойств, которые находятся за пределами нашего рассмотрения, но включают упоминавшееся ранее свойство Alignment, указывающее, где относительно границы фигуры должна быть нарисована линия, а также какую фигуру нарисовать в конце линии (нужно ли округлять форму).
Область внутри толстой линии может быть закрашена сплошным цветом с помощью пера или кисти. Следовательно, экземпляр Pen может содержать ссылку на экземпляр Brush. Это достаточно мощное средство, так как при его содействии можно нарисовать линии, окрашенные с помощью штрихования или линейного затенения. Существует четыре различных способа, с помощью которых создаются экземпляры Pen. Можно задать цвет или кисть, оба эти конструктора будут создавать перо шириной в один пиксель. Можно также в дополнение к цвету или кисти задать значение типа 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 содержит ряд готовых перьев. Эти перья все имеют ширину в один пиксель и используют обычное множество именованных цветов Интернета, что позволяет создавать перья таким образом:
Pen SolidYellowPen = Pens.Yellow;
Рисование фигур и линий
В первой части главы были рассмотрены базовые классы и объекты, требуемые для рисования специальных фигур и т.д. на экране. Теперь дадим обзор некоторых методов рисования, предоставляемых классом Graphics, и в конце — кратким примером проиллюстрируем несколько кистей и перьев.
System.Drawing.Graphics имеет большое число методов, позволяющих рисовать различные линии, контуры фигур и сплошные фигуры. Их существует слишком много, но таблица (см. ниже) представляет основные методы и дает представление о множестве фигур, которые можно нарисовать.
Метод Типичные параметры Что рисует DrawLine Перо, начальная и конечная точки Одиночная прямая линия DrawRectangle Перо, позиция и размер Контур прямоугольника DrawEllipse Перо, позиция и размер Контур эллипса FillRectangle Кисть, позиция и размер Закрашенный прямоугольник FillEllipse Кисть, позиция и размер Закрашенный эллипс DrawLines Перо, массив точек Последовательность линий, соединяющих каждую точку в массиве со следующей DrawBezier Перо, 4 точки Гладкая кривая, соединяющая две конечные точки и проходящая через две оставшиеся точки, используемые для управления формой кривой DrawCurve Перо, массив точек Гладкая кривая, проходящая через точки DrawArc Перо, прямоугольник, два угла Часть окружности внутри прямоугольника, определенная углами DrawClosedCurve Перо, массив точек Подобен DrawCurve, но рисует также прямую линию для соединения концов кривой DrawPie Перо, прямоугольник, два угла Клиновидный контур внутри прямоугольника FillPie Кисть, прямоугольник, два угла Закрашенная клиновидная область в прямоугольнике DrawPolygon Перо, массив точек Подобен DrawLines, но соединяет также первую и последнюю точки для замыкания нарисованной фигурыПрежде чем закончить тему рисования простых объектов, создадим пример, который демонстрирует разновидности визуальных эффектов, создаваемых с помощью кистей. Пример называется ScrollMoreShapes и является по сути пересмотром примера ScrollShapes. Помимо прямоугольника и эллипса, добавим толстую линию и закрасим фигуры с помощью различных кистей. Мы уже объясняли принципы рисования, поэтому код представлен с минимальными комментариями. Первое: в связи с новыми кистями, нам нужно указать, что используется пространство имен System.Drawing.Drawing2D:
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
Используем несколько дополнительных полей в классе Form1, которые содержат данные о местах, где должны быть нарисованы фигуры, а также различные перья и кисти:
private Rectangle rectangleBounds =
new Rectangle(new Point(0, 0), new Size(200, 200));
private Rectangle ellipseBounds =
new Rectangle(new Point(50, 200), new Size(200, 150));
private Pen BluePen = new Pen(Color.Blue, 3);
private Pen RedPen = new Pen(Color.Red, 2);
private Brush SolidAzureBrush = Brushes.Azure;
private Brush CrossBrush = new HatchBrush(HatchStyle.Cross, Color.Azure);
static private Brush BrickBrush =
new HatchBrush(HatchStyle.DiagonalBrick, Color.DarkGoldenrod, Color.Cyan);
private Pen BrickWidePen = new Pen(BrickBrush, 10);