- •Объекты 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
- •Параметры качества
- •Преобразования
- •Область обрезки
- •Использование вложенных графических контейнеров
- •Преобразования во вложенных контейнерах
- •Обрезка во вложенных контейнерах
- •Параметры качества во вложенных контейнерах
- •Различные уровни вложенных контейнеров
- •Использование областей
- •Проверка нахождения указателя мыши в заданной области
- •Компиляция кода
- •Обрезка изображения по границам области обрезки
- •Компиляция кода
- •Получение списка установленных кодировщиков
- •Компиляция кода
- •Получение списка установленных декодеров
- •Компиляция кода
- •Компиляция кода
Три категории графических служб
Графические элементы Windows Forms можно разделить на три основные категории:
Двухмерная (2-D) векторная графика
Рисунки
Типографская разметка
Двухмерная векторная графика
Двухмерная векторная графика включает в себя примитивы (прямые и кривые линии, геометрические фигуры), заданные набором точек в системе координат. Например, прямую линию (отрезок), можно задать двумя крайними точками, а прямоугольник можно задать положением его верхнего левого угла и парой чисел, определяющих высоту и ширину прямоугольника. Простейший контур можно задать массивом точек, которые должны быть соединены отрезками прямых. Сложная кривая сплайна Безье может быть задана четырьмя контрольными точками.
В GDI+ имеются классы и структуры, хранящие данные о самих примитивах, классы, хранящие данные о способе рисования примитивов, и классы, непосредственно рисующие примитивы. Например, в структуре Rectangle хранятся расположение и размер прямоугольника, в классе Pen хранятся данные о цвете, толщине и стиле линии, а класс Graphics содержит методы для рисования линий, прямоугольников, траекторий и других фигур. Существуют также несколько классов Brush, в которых хранятся данные о способах заливки замкнутых фигур и контуров цветом или рисунком.
Векторный рисунок (последовательность графических команд) можно записать в метафайл. Для записи, отображения и сохранения метафайлов в GDI+ имеется класс Metafile. Для проверки данных в заголовке метафайла служат классы MetafileHeader и MetaHeader.
Рисунки
Некоторые рисунки сложно или невозможно отображать с использованием векторной графики. Например, рисунки на кнопках панели инструментов или рисунки, отображаемые как значки, довольно сложно задать как последовательность прямых и кривых линий. Сохранить с помощью векторной графики высококачественную фотографию переполненного стадиона будет еще сложнее. Рисунки такого типа хранятся в виде точечных рисунков — массивов чисел, каждое из которых определяет цвет определенной точки на рисунке. Для отображения и сохранения растровых рисунков, а также для работы с ними, в GDI+ имеется класс Bitmap.
Типографская разметка
Типографская разметка связана с отображением текста на экране путем использования различных шрифтов, размеров и стилей. В GDI+ имеются широкие возможности для решения этой сложной задачи. Одним из новых средств GDI+ является субточечное сглаживание, позволяющее отображать на жидкокристаллических дисплеях текст с более гладкими краями, чем обычно.
Кроме того, в Windows Forms поддерживается вывод текста с возможностями GDI в классе TextRenderer.
Structure of the Graphics Interface
The managed class interface to GDI+ contains about 60 classes, 50 enumerations, and 8 structures. The Graphics class is at the core of GDI+ functionality; it is the class that actually draws lines, curves, figures, images, and text.
Important Classes
Many classes work together with the Graphics class. For example, the DrawLine method receives a Pen object, which holds attributes (color, width, dash style, and the like) of the line to be drawn. The FillRectangle method can receive a pointer to a LinearGradientBrush object, which works with the Graphics object to fill a rectangle with a gradually changing color. Font and StringFormat objects influence the way a Graphics object draws text. A Matrix object stores and manipulates the world transformation of a Graphics object, which is used to rotate, scale, and flip images.
GDI+ provides several structures (for example, Rectangle, Point, and Size) for organizing graphics data. Also, certain classes serve primarily as structured data types. For example, the BitmapData class is a helper for the Bitmap class, and the PathData class is a helper for the GraphicsPath class.
GDI+ defines several enumerations, which are collections of related constants. For example, the LineJoin enumeration contains the elements Bevel, Miter, and Round, which specify styles that can be used to join two lines.
About GDI+ Managed Code
GDI+ is the portion of the Windows XP operating system that provides two-dimensional vector graphics, imaging, and typography. GDI+ improves on GDI (the Graphics Device Interface included with earlier versions of Windows) by adding new features and by optimizing existing features.
The GDI+ managed class interface (a set of wrappers) is part of the .NET Framework, an environment for building, deploying, and running XML Web services and other applications.
