
- •Объекты 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
- •Параметры качества
- •Преобразования
- •Область обрезки
- •Использование вложенных графических контейнеров
- •Преобразования во вложенных контейнерах
- •Обрезка во вложенных контейнерах
- •Параметры качества во вложенных контейнерах
- •Различные уровни вложенных контейнеров
- •Использование областей
- •Проверка нахождения указателя мыши в заданной области
- •Компиляция кода
- •Обрезка изображения по границам области обрезки
- •Компиляция кода
- •Получение списка установленных кодировщиков
- •Компиляция кода
- •Получение списка установленных декодеров
- •Компиляция кода
- •Компиляция кода
Сплошные кисти
Чтобы залить замкнутую фигуру, необходимы объекты Graphics и Brush. Объект Graphics предоставляет такие методы, как FillRectangle и FillEllipse, а в объекте Brush хранятся параметры заливки, такие как цвет и шаблон. Объект Brush передается методу заливки в качестве одного из аргументов. В следующем примере кода демонстрируется заливка эллипса сплошным красным цветом.
-----
Примечание. |
В предыдущем примере используется кисть класса SolidBrush, унаследованного у класса Brush. |
Штриховые кисти
При заливке формы штриховой кистью необходимо задать основной цвет, цвет фона и стиль штриховки. Основной цвет определяет цвет штриховки.
HatchBrush myHatchBrush = new HatchBrush(HatchStyle.Vertical, Color.Blue, Color.Green); |
В GDI+ имеется более 50 стилей штриховки; на следующем рисунке показаны стили Horizontal, ForwardDiagonal и Cross.
-----------------
Texture Brushes
With
a texture brush, you can fill a shape with a pattern stored in a
bitmap. For example, suppose the following picture is stored in a
disk file named MyTexture.bmp
.
The
following code example shows how to fill an ellipse by repeating the
picture stored in MyTexture.bmp
.
Image myImage = Image.FromFile("MyTexture.bmp"); TextureBrush myTextureBrush = new TextureBrush(myImage); myGraphics.FillEllipse(myTextureBrush, 0, 0, 100, 50); |
The following illustration shows the filled ellipse.
Gradient Brushes
GDI+ provides two kinds of gradient brushes: linear and path. You can use a linear gradient brush to fill a shape with color that changes gradually as you move across the shape horizontally, vertically, or diagonally. The following code example shows how to fill an ellipse with a horizontal gradient brush that changes from blue to green as you move from the left edge of the ellipse to the right edge.
LinearGradientBrush myLinearGradientBrush = new LinearGradientBrush( myRectangle, Color.Blue, Color.Green, LinearGradientMode.Horizontal); myGraphics.FillEllipse(myLinearGradientBrush, myRectangle); |
Текстурные кисти
Текстурная
кисть позволяет заливать фигуру с
использованием узора, сохраненного в
виде растрового изображения. Например,
предположим, что приведенный ниже
рисунок сохранен на диске в файле под
названием MyTexture.bmp
.
В
приведенном ниже примере демонстрируется
заливка эллипса путем повторения в его
внутренней области рисунка, сохраненного
в файле MyTexture.bmp
.
------------------
Эллипс после заливки представлен на следующем рисунке.
Градиентные кисти
В GDI+ имеется два типа градиентных кистей: кисти линейного градиента и кисти градиента контура. Кисти линейного градиента можно использовать для заливки фигуры цветом, постепенно меняющимся от одного края фигуры до другого по горизонтали, по вертикали или по диагонали. В приведенном ниже примере кода демонстрируется заливка эллипса с использованием горизонтальной градиентной кисти, обеспечивающей изменение цвета от синего до зеленого при движении от левой границы эллипса до его правой границы.
-----------
The following illustration shows the filled ellipse.
A path gradient brush can be configured to change color as you move from the center of a shape toward the edge.
Path gradient brushes are quite flexible. The gradient brush used to fill the triangle in the following illustration changes gradually from red at the center to each of three different colors at the vertices.
Эллипс после заливки представлен на следующем рисунке.
Кисть градиента контура может быть настроена так, чтобы цвет менялся от центра фигуры к ее границам.
Кисти градиента контура обеспечивают высокую степень гибкости. В приведенном ниже примере демонстрируется использование градиентной кисти для заливки треугольника цветом, изменяющимся от красного в центре до трех различных цветов в каждой из трех вершин.
Open and Closed Curves in GDI+
The following illustration shows two curves: one open and one closed.
Managed Interface for Curves
Closed curves have an interior and therefore can be filled with a brush. The Graphics class in GDI+ provides the following methods for filling closed shapes and curves: FillRectangle, FillEllipse, FillPie, FillPolygon, FillClosedCurve, FillPath, and FillRegion. Whenever you call one of these methods, you must pass one of the specific brush types (SolidBrush, HatchBrush, TextureBrush, LinearGradientBrush, or PathGradientBrush) as an argument.
The FillPie method is a companion to the DrawArc method. Just as the DrawArc method draws a portion of the outline of an ellipse, the FillPie method fills a portion of the interior of an ellipse. The following example draws an arc and fills the corresponding portion of the interior of the ellipse:
myGraphics.FillPie(mySolidBrush, 0, 0, 140, 70, 0, 120); myGraphics.DrawArc(myPen, 0, 0, 140, 70, 0, 120); |
The following illustration shows the arc and the filled pie.
The FillClosedCurve method is a companion to the DrawClosedCurve method. Both methods automatically close the curve by connecting the ending point to the starting point. The following example draws a curve that passes through (0, 0), (60, 20), and (40, 50). Then, the curve is automatically closed by connecting (40, 50) to the starting point (0, 0), and the interior is filled with a solid color.
Point[] myPointArray = { new Point(0, 0), new Point(60, 20), new Point(40, 50) }; myGraphics.DrawClosedCurve(myPen, myPointArray); myGraphics.FillClosedCurve(mySolidBrush, myPointArray); |
Замкнутые и незамкнутые кривые в GDI+
На приведенном ниже рисунке изображены две кривые: открытая и замкнутая.
-------