
- •Объекты 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 является область обрезки. Все операции рисования, выполняемые объектом Graphics, ограничиваются областью обрезки данного объекта Graphics. Для установки границ области обрезки служит метод SetClip.
Пример
В следующем примере создается контур, состоящий из одного многоугольника. Затем конструируется область на основе созданного ранее контура. Область передается методу SetClip объекта Graphics, а затем отображаются две строки.
Обрезанные строки показаны на следующем рисунке.
-----
Компиляция кода
Предыдущий пример предназначен для работы с Windows Forms, для него необходим объект PaintEventArgs e, передаваемый в качестве параметра обработчику события PaintEventHandler.
Using Image Encoders and Decoders in Managed GDI+
The System.Drawing namespace provides the Image and Bitmap classes for storing and manipulating images. By using image encoders in GDI+, you can write images from memory to disk. By using image decoders in GDI+, you can load images from disk into memory. An encoder translates the data in an Image or Bitmap object into a designated disk file format. A decoder translates the data in a disk file to the format required by the Image and Bitmap objects.
GDI+ has built-in encoders and decoders that support the following file types:
BMP
GIF
JPEG
PNG
TIFF
GDI+ also has built-in decoders that support the following file types:
WMF
EMF
ICON
How to: List Installed Encoders
You may want to list the image encoders available on a computer, to determine whether your application can save to a particular image file format. The ImageCodecInfo class provides the GetImageEncoders static methods so that you can determine which image encoders are available. GetImageEncoders returns an array of ImageCodecInfo objects.
Example
The following code example outputs the list of installed encoders and their property values.
Применение кодировщиков и декодеров изображений в управляемом GDI+
В пространстве имен System.Drawing имеются классы Image и Bitmap, которые служат для хранения изображений и управления ими. С помощью кодировщиков изображений GDI+ можно сохранять изображения из памяти на диск. С помощью декодеров изображений GDI+ можно загружать изображения с диска в память. Кодировщик выполняет трансляцию данных в объекте Image или Bitmap в формат файла для сохранения на диске. Декодер выполняет трасляцию данных в файле на диске в формат, который требуется для работы объектов Image и Bitmap.
В GDI+ имеются встроенные кодировщики и декодеры, поддерживающие следующие типы файлов:
BMP
GIF
JPEG
PNG
TIFF
В GDI+ также имеются встроенные декодеры, поддерживающие следующие типы файлов:
WMF
EMF
ICON
Получение списка установленных кодировщиков
Иногда требуется получить список установленных на компьютере кодировщиков, чтобы понять, может ли приложение сохранять изображение в виде файла того или иного формата. У класса ImageCodecInfo имеются статические методы GetImageEncoders, позволяющие получить список доступных кодировщиков изображений. Метод GetImageEncoders возвращает массив объектов ImageCodecInfo.
Пример
Следующий пример кода возвращает список установленных кодировщиков и значения их свойств.
private void GetImageEncodersExample(PaintEventArgs e) { // Get an array of available encoders. ImageCodecInfo[] myCodecs; myCodecs = ImageCodecInfo.GetImageEncoders(); int numCodecs = myCodecs.GetLength(0); // Set up display variables. Color foreColor = Color.Black; Font font = new Font("Arial", 8); int i = 0; // Check to determine whether any codecs were found. if (numCodecs > 0) { // Set up an array to hold codec information. There are 9 // information elements plus 1 space for each codec, so 10 times // the number of codecs found is allocated. string[] myCodecInfo = new string[numCodecs * 10]; // Write all the codec information to the array. for (i = 0; i < numCodecs; i++) { myCodecInfo[i * 10] = "Codec Name = " + myCodecs[i].CodecName; myCodecInfo[(i * 10) + 1] = "Class ID = " + myCodecs[i].Clsid.ToString(); myCodecInfo[(i * 10) + 2] = "DLL Name = " + myCodecs[i].DllName; myCodecInfo[(i * 10) + 3] = "Filename Ext. = " + myCodecs[i].FilenameExtension; myCodecInfo[(i * 10) + 4] = "Flags = " + myCodecs[i].Flags.ToString(); myCodecInfo[(i * 10) + 5] = "Format Descrip. = " + myCodecs[i].FormatDescription; myCodecInfo[(i * 10) + 6] = "Format ID = " + myCodecs[i].FormatID.ToString(); myCodecInfo[(i * 10) + 7] = "MimeType = " + myCodecs[i].MimeType; myCodecInfo[(i * 10) + 8] = "Version = " + myCodecs[i].Version.ToString(); myCodecInfo[(i * 10) + 9] = " "; } int numMyCodecInfo = myCodecInfo.GetLength(0); // Render all of the information to the screen. int j = 20; for (i = 0; i < numMyCodecInfo; i++) { e.Graphics.DrawString(myCodecInfo[i], font, new SolidBrush(foreColor), 20, j); j += 12; } } else e.Graphics.DrawString("No Codecs Found", font, new SolidBrush(foreColor), 20, 20); } |
Compiling the Code
This example requires:
A Windows Forms application.
A PaintEventArgs, which is a parameter of PaintEventHandler.
-------