Применение контуров
Класс GraphicsPath содержит следующие методы для рисования последовательностей элементов приведенного выше списка: AddLine (прямые линии), AddRectangle (прямоугольники), AddEllipse (эллипсы), AddArc (дуги), AddPolygon (многоугольники), AddCurve (фундаментальные сплайны) и AddBezier (сплайны Безье). Каждый из этих методов перегружен, это значит, что каждый метод может получать различные наборы параметров. Например, один вариант метода AddLine получает четыре целых числа, а другой вариант метода AddLine получает два целых числа и объект Point.
Помимо перечисленных ранее методов для рисования линий, прямоугольников и сплайнов Безье существуют вспомогательные методы, выполняющие добавление к контуру нескольких элементов за один вызов: AddLines, AddRectangles и AddBeziers. Для методов AddCurve и AddArc также существуют вспомогательные методы AddClosedCurve и AddPie, позволяющие добавлять к контуру замкнутую кривую или сектор.
To draw a path, you need a Graphics object, a Pen object, and a GraphicsPath object. The Graphics object provides the DrawPath method, and the Pen object stores attributes, such as width and color, of the line used to render the path. The GraphicsPath object stores the sequence of lines and curves that make up the path. The Pen object and the GraphicsPath object are passed as arguments to the DrawPath method. The following example draws a path that consists of a line, an ellipse, and a Bézier spline:
myGraphicsPath.AddLine(0, 0, 30, 20); myGraphicsPath.AddEllipse(20, 20, 20, 40); myGraphicsPath.AddBezier(30, 60, 70, 60, 50, 30, 100, 10); myGraphics.DrawPath(myPen, myGraphicsPath); |
The following illustration shows the path.
In addition to adding lines, rectangles, and curves to a path, you can add paths to a path. This allows you to combine existing paths to form large, complex paths.
myGraphicsPath.AddPath(graphicsPath1, false); myGraphicsPath.AddPath(graphicsPath2, false); |
Чтобы нарисовать контур, нужно создать объекты Graphics, Pen и GraphicsPath. У объекта Graphics имеется метод DrawPath, а объект Pen предназначен для хранения таких атрибутов, как ширина и цвет линии, с помощью которой рисуется контур. Объект GraphicsPath служит хранилищем для последовательности прямых и кривых линий, составляющих путь. Объекты Pen и GraphicsPath передаются в качестве аргументов методу DrawPath. Приведенный ниже пример демонстрирует рисование контура, состоящего из отрезка прямой, эллипса и сплайна Безье.
--------------
На приведенном ниже рисунке изображен полученный контур.
Кроме отрезков, прямоугольников и кривых к контуру можно добавлять другие контуры. Это позволяет объединять существующие контуры и создавать большие и сложные контуры.
------------------
There are two other items you can add to a path: strings and pies. A pie is a portion of the interior of an ellipse. The following example creates a path from an arc, a cardinal spline, a string, and a pie:
GraphicsPath myGraphicsPath = new GraphicsPath();
Point[] myPointArray = { new Point(5, 30), new Point(20, 40), new Point(50, 30)};
FontFamily myFontFamily = new FontFamily("Times New Roman"); PointF myPointF = new PointF(50, 20); StringFormat myStringFormat = new StringFormat();
myGraphicsPath.AddArc(0, 0, 30, 20, -90, 180); myGraphicsPath.StartFigure(); myGraphicsPath.AddCurve(myPointArray); myGraphicsPath.AddString("a string in a path", myFontFamily, 0, 24, myPointF, myStringFormat); myGraphicsPath.AddPie(230, 10, 40, 40, 40, 110); myGraphics.DrawPath(myPen, myGraphicsPath); |
The following illustration shows the path. Note that a path does not have to be connected; the arc, cardinal spline, string, and pie are separated.
К контуру можно также добавлять еще два элемента: строку и сектор. Сектор — это часть внутренней области эллипса. В приведенном ниже примере демонстрируется создание контура из дуги, фундаментального сплайна, строки и сектора.
---------
На приведенном ниже рисунке изображен полученный контур. Обратите внимание, что компоненты контура не обязаны быть связанными — дуга, фундаментальный сплайн, строка и сектор отделены друг от друга.
Brushes and Filled Shapes in GDI+
A closed shape, such as a rectangle or an ellipse, consists of an outline and an interior. The outline is drawn with a pen and the interior is filled with a brush. GDI+ provides several brush classes for filling the interiors of closed shapes: SolidBrush, HatchBrush, TextureBrush, LinearGradientBrush, and PathGradientBrush. All of these classes inherit from the Brush class. The following illustration shows a rectangle filled with a solid brush and an ellipse filled with a hatch brush.
Solid Brushes
To fill a closed shape, you need an instance of the Graphics class and a Brush. The instance of the Graphics class provides methods, such as FillRectangle and FillEllipse, and the Brush stores attributes of the fill, such as color and pattern. The Brush is passed as one of the arguments to the fill method. The following code example shows how to fill an ellipse with a solid red color.
SolidBrush mySolidBrush = new SolidBrush(Color.Red); myGraphics.FillEllipse(mySolidBrush, 0, 0, 60, 40); |
Note: |
In the preceding example, the brush is of type SolidBrush, which inherits from Brush. |
Hatch Brushes
When you fill a shape with a hatch brush, you specify a foreground color, a background color, and a hatch style. The foreground color is the color of the hatching.
HatchBrush myHatchBrush = new HatchBrush(HatchStyle.Vertical, Color.Blue, Color.Green); |
GDI+ provides more than 50 hatch styles; the three styles shown in the following illustration are Horizontal, ForwardDiagonal, and Cross.
Кисти и закрашенные фигуры в GDI+
Замкнутые фигуры, такие как прямоугольники или эллипсы, состоят из двух частей — из контура и из внутренней области. Контур рисуется с помощью пера, а внутренняя область заполняется с помощью кисти. В GDI+ имеется несколько классов кистей для заливки замкнутых фигур: SolidBrush, HatchBrush, TextureBrush, LinearGradientBrush и PathGradientBrush. Все эти классы являются производными от класса Brush. На приведенном ниже рисунке изображен прямоугольник, залитый сплошной кистью, и эллипс, залитый штриховой кистью.
---------
- Объекты Graphics и Drawing в Windows Forms
- Обзор графических возможностей
- Интерфейс управляемых классов
- Три категории графических служб
- Двухмерная векторная графика
- Рисунки
- Типографская разметка
- Структура интерфейса Graphics
- Важные классы
- Прямые и кривые линии и фигуры
- Общие сведения о векторной графике
- Методы рисования с помощью графических объектов
- Рисование линии
- Создание объекта Pen
- Штриховые линии и завершения отрезков
- Рисование прямоугольника
- Рисование эллипса
- Рисование дуги
- Рисование многоугольника
- Физические и математические сплайны
- Рисование сплайнов Безье
- Применение контуров
- Сплошные кисти
- Штриховые кисти
- Текстурные кисти
- Градиентные кисти
- Управляемый интерфейс для кривых
- Использование областей
- Задание области обрезки
- Сглаживание прямых и кривых линий
- Неровности
- Сглаживание
- Работа с растровыми и векторными изображениями с использованием классов Image, Bitmap и Metafile
- Типы точечных рисунков
- Форматы графических файлов
- Форматы метафайлов
- Типы файлов и клонирование
- Варианты DrawImage
- Системы координат и преобразования
- Типы систем координат
- Преобразования и системы координат
- Матричное представление преобразований
- Составные преобразования
- Глобальные и локальные преобразования
- Глобальные преобразования
- Локальные преобразования
- Использование управляемых графических классов Приступая к программированию графики
- Создание объектов Graphics для рисования
- Создание объекта Graphics
- PaintEventArgs в обработчике события Paint
- Получение ссылки на объект Graphics из объекта PaintEventArgs в событии Paint
- Рисование фигур и изображений и управление ими
- Создание фигурной формы Windows Forms
- Компиляция кода
- Копирование пикселов для уменьшения эффекта дрожания изображения в Windows Forms
- Компиляция кода
- Рисование линий и фигур с помощью пера
- Рисование линий с помощью пера
- Компиляция кода
- Рисование прямоугольников с помощью пера
- Компиляция кода
- Задание толщины и выравнивания пера
- Изменение толщины пера
- Изменение выравнивания пера
- Создание вложенного пера
- Рисование линий с наконечниками
- Компиляция кода
- Соединение линий
- Компиляция кода
- Рисование пользовательских пунктирных линий
- Компиляция кода
- Рисование линии с текстурным заполнением
- Компиляция кода
- Использование кисти для заливки фигур
- Заливка фигуры сплошным цветом
- Компиляция кода
- Штриховая заливка фигуры
- Компиляция кода
- Заливка фигуры текстурой, созданной на основе изображения
- Компиляция кода
- Мозаичное заполнение фигуры заданным изображением
- Мозаичное заполнение изображением
- Горизонтальное зеркальное преобразование изображения при мозаичном заполнении
- Вертикальное зеркальное преобразование изображения при мозаичном заполнении
- Мозаичное заполнение с зеркальным отображением изображения по горизонтали и вертикали
- Заливка фигур с помощью градиентной кисти
- Создание линейного градиента
- Использование горизонтальных линейных градиентов
- Настройка линейных градиентов
- Создание диагональных линейных градиентов
- Создание градиента вдоль контура
- Заливка эллипса с использованием градиента контура
- Указание точек на границе
- Настройка градиента контура
- Настройка с интерполяцией
- Задание центральной точки
- Применение гамма-коррекции к градиенту
- Компиляция кода
- Загрузка и отображение метафайлов
- Компиляция кода
- Обрезка и масштабирование изображений
- Компиляция кода
- Поворот, отражение и наклон изображений
- Компиляция кода
- Использование режима интерполяции для управления качеством изображений при масштабировании
- Компиляция кода
- Создание эскизов изображений
- Компиляция кода
- Повышение производительности за счет отключения автоматического масштабирования
- Компиляция кода
- Чтение метаданных изображения
- Значение
- Пример Описание
- Компиляция кода
- Создание растрового изображения во время выполнения
- Компиляция кода
- Извлечение связанного с файлом значка в Windows Forms
- Компиляция кода
- Альфа-смешение цвета для линий и заливок
- Рисование непрозрачных и полупрозрачных линий
- Компиляция кода
- Рисование непрозрачными и полупрозрачными кистями
- Компиляция кода
- Использование режима комбинирования для управления альфа-смешением
- Компиляция кода
- Использование матрицы цветов для задания значений прозрачности в изображениях
- Компиляция кода
- Шрифты и текст
- Разработка шрифтов и их семейств
- Компиляция кода
- Рисование текста в указанной позиции
- Рисование строки текста с использованием gdi
- Компиляция кода
- Многострочный вывод текста в прямоугольнике
- Рисование текста с переносом по словам в прямоугольнике с помощью gdi
- Компиляция кода
- Рисование текста с использованием gdi
- Компиляция кода
- Выравнивание рисуемого текста
- Рисование центрированного текста с использованием gdi (DrawText)
- Компиляция кода
- Вывод текста по вертикали
- Компиляция кода
- Установка позиций табуляции для выводимого текста
- Компиляция кода
- Перебор установленных шрифтов
- Компиляция кода
- Получение метрик шрифтов
- Компиляция кода
- Сглаживание текста
- Компиляция кода
- Построение и рисование кривых
- Рисование фундаментальных сплайнов
- Рисование фундаментального сплайна в форме колокола
- Рисование замкнутого фундаментального сплайна
- Изменение изгиба фундаментального сплайна
- Компиляция кода
- Рисование отдельного сплайна Безье
- Компиляция кода
- Рисование последовательности сплайнов Безье
- Компиляция кода
- Построение и рисование контуров
- Создание изображений из прямых и кривых линий и геометрических фигур
- Компиляция кода
- Заливка открытых фигур
- Компиляция кода
- Спрямление участков кривой
- Спрямление контура
- Использование объемного преобразования
- Различные типы преобразований
- Значение порядка преобразований
- Примеры составных преобразований
- Использование графических контейнеров
- Управление состоянием объекта Graphics
- Состояние объекта Graphics
- Параметры качества
- Преобразования
- Область обрезки
- Использование вложенных графических контейнеров
- Преобразования во вложенных контейнерах
- Обрезка во вложенных контейнерах
- Параметры качества во вложенных контейнерах
- Различные уровни вложенных контейнеров
- Использование областей
- Проверка нахождения указателя мыши в заданной области
- Компиляция кода
- Обрезка изображения по границам области обрезки
- Компиляция кода
- Получение списка установленных кодировщиков
- Компиляция кода
- Получение списка установленных декодеров
- Компиляция кода
- Компиляция кода