
- •Объекты 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
- •Параметры качества
- •Преобразования
- •Область обрезки
- •Использование вложенных графических контейнеров
- •Преобразования во вложенных контейнерах
- •Обрезка во вложенных контейнерах
- •Параметры качества во вложенных контейнерах
- •Различные уровни вложенных контейнеров
- •Использование областей
- •Проверка нахождения указателя мыши в заданной области
- •Компиляция кода
- •Обрезка изображения по границам области обрезки
- •Компиляция кода
- •Получение списка установленных кодировщиков
- •Компиляция кода
- •Получение списка установленных декодеров
- •Компиляция кода
- •Компиляция кода
Форматы графических файлов
Существует множество стандартных форматов файлов для сохранения растровых изображений. Ниже описаны форматы графических файлов, поддерживаемые интерфейсом GDI+.
BMP
BMP — это стандартный формат, используемый в Windows для хранения аппаратно- и программно-независимых изображений. Количество битов, сопоставленных в данном файле BMP одной точке (1, 4, 8, 15, 24, 32 или 64), указывается в заголовке файла. Наиболее часто используются файлы BMP, в которых каждой точке соответствует 24 бита. Обычно файлы BMP не подвергаются сжатию, поэтому этот формат плохо подходит для передачи данных через Интернет.
GIF (Graphics Interchange Format)
Изображения в формате GIF часто размещаются на веб-страницах. Файлы GIF хорошо подходят для хранения изображений, образованных линиями, рисунков со сплошными блоками одного цвета и рисунков с четкой границей между различными цветами. Файлы GIF подвергаются сжатию, но сжатие происходит без потерь. Восстановленное после сжатия изображение полностью совпадает с исходным изображением. Один цвет в изображении формата GIF можно сделать прозрачным, так что через изображение в качестве фона будет проглядывать веб-страница, на которой размещено это изображение. Последовательность изображений GIF можно сохранять в одном файле, что позволяет создавать анимированные изображения GIF. Изображения формата GIF могут содержать не более 8 бит на точку, поэтому в таких изображениях можно использовать не более 256 цветов.
JPEG (Joint Photographic Experts Group)
JPEG — это схема сжатия, хорошо работающая для естественных образов, таких как отсканированные фотографии. Некоторые данные теряются в процессе сжатия, но обычно потеря остается незаметной для человеческого глаза. Изображения JPEG содержат 24 бита данных для каждой точки, поэтому на таких рисунках можно передать более 16 миллионов цветов. JPEG не поддерживает прозрачность или анимацию.
Степень сжатия изображений с помощью схемы JPEG можно настраивать, но большая степень сжатия (позволяющая получать меньшие файлы) приводит к росту потерь данных. Коэффициент сжатия 20:1 обычно позволяет получить изображение, которое человеческий глаз с трудом может отличить от оригинала. На приведенном ниже рисунке представлено изображение в формате BMP и два изображения JPEG, полученные в результате сжатия изображения в формате BMP. Первый рисунок JPEG получен с использованием коэффициента сжатия 4:1, а второй получен с использованием коэффициента сжатия 8:1.
JPEG compression does not work well for line drawings, blocks of solid color, and sharp boundaries. The following illustration shows a BMP along with two JPEGs and a GIF. The JPEGs and the GIF were compressed from the BMP. The compression ratio is 4:1 for the GIF, 4:1 for the smaller JPEG, and 8:3 for the larger JPEG. Note that the GIF maintains the sharp boundaries along the lines, but the JPEGs tend to blur the boundaries.
JPEG is a compression scheme, not a file format. JPEG File Interchange Format (JFIF) is a file format commonly used for storing and transferring images that have been compressed according to the JPEG scheme. JFIF files displayed by Web browsers use the .jpg extension.
Exchangeable Image File (EXIF)
EXIF is a file format used for photographs captured by digital cameras. An EXIF file contains an image that is compressed according to the JPEG specification. An EXIF file also contains information about the photograph (date taken, shutter speed, exposure time, and so on) and information about the camera (manufacturer, model, and so on).
--------
Используемый в схеме JPEG алгоритм сжатия плохо подходит для сжатия изображений, образованных линиями, сплошных блоков одного цвета и изображений с четкими границами между цветами. На приведенном ниже рисунке показано изображение в формате BMP, два изображения JPEG и одно изображение в формате GIF. Изображения JPEG и GIF были получены путем сжатия изображения в формате BMP. Для формата GIF и для меньшего изображения JPEG был задан коэффициент 4:1, а для большего изображения JPEG был задан коэффициент сжатия 8:3. Обратите внимание, что изображение в формате GIF сохраняет четкие границы вдоль линий, а на изображениях JPEG эти границы размываются.
----------
JPEG является схемой сжатия, а не файловым форматом. JPEG File Interchange Format (JFIF) — это файловый формат, обычно используемый для хранения и передачи изображений, сжатых по схеме JPEG. Файлы формата JFIF, отображаемые веб-обозревателями, обычно имеют расширение JPG.
EXIF (Exchangeable Image File)
EXIF — это формат файлов, используемый для хранения фотографий, полученных с помощью цифровой камеры. Файл EXIF содержит изображение, сжатое согласно спецификации JPEG. Файл EXIF также содержит данные о фотографии (дата съемки, скорость затвора, время экспонирования и т. п.) и сведения о фотокамере (производитель, модель и т. п.).
Portable Network Graphics (PNG)
The PNG format retains many of the advantages of the GIF format but also provides capabilities beyond those of GIF. Like GIF files, PNG files are compressed with no loss of information. PNG files can store colors with 8, 24, or 48 bits per pixel and grayscales with 1, 2, 4, 8, or 16 bits per pixel. In contrast, GIF files can use only 1, 2, 4, or 8 bits per pixel. A PNG file can also store an alpha value for each pixel, which specifies the degree to which the color of that pixel is blended with the background color.
PNG improves on GIF in its ability to progressively display an image (that is, to display better and better approximations of the image as it arrives over a network connection). PNG files can contain gamma correction and color correction information so that the images can be accurately rendered on a variety of display devices.
Tag Image File Format (TIFF)
TIFF is a flexible and extendable format that is supported by a wide variety of platforms and image-processing applications. TIFF files can store images with an arbitrary number of bits per pixel and can employ a variety of compression algorithms. Several images can be stored in a single, multiple-page TIFF file. Information related to the image (scanner make, host computer, type of compression, orientation, samples per pixel, and so on) can be stored in the file and arranged through the use of tags. The TIFF format can be extended as needed by the approval and addition of new tags.
PNG (Portable Network Graphics)
Формат PNG сохраняет многие преимущества формата GIF, но также предоставляет многие возможности, недоступные в GIF. Как и в формате GIF, файлы PNG сжимаются без потери данных. Файлы PNG могут содержать цвета, задаваемые 8, 24 или 48 битами каждый, и оттенки серого, задаваемые 1, 2, 4, 8 или 16 битами на точку. В файлах GIF цвет одной точки можно задавать только 1, 2, 4 или 8 битами. В файлах PNG можно также задавать альфа-фактор для каждой точки, который определяет степень слияния цвета точки с цветом фона.
В формате PNG расширена реализованная в формате GIF возможность прогрессивно отображать изображение, что позволяет выводить на экран все более и более подробное приближение изображения по мере поступления его частей через сетевое соединение. Файлы PNG могут содержать данные о гамма-коррекции и о цветовой коррекции, что позволяет правильно строить изображение на различных устройствах отображения.
TIFF (Tag Image File Format)
TIFF — это гибкий и расширяемый формат, поддерживаемый большим количеством платформ и приложений для обработки изображений. В файлах TIFF можно хранить изображения с произвольным количеством битов на одну точку и использовать различные алгоритмы сжатия. В одном многостраничном файле TIFF можно сохранить несколько изображений. Данные, связанные с изображением (модель сканера, компьютер размещения, тип сжатия, ориентация, количество примеров на точку и т. п.) также могут быть сохранены в файле и упорядочены с помощью тегов. Формат TIFF может быть расширен в соответствии с нужными требованиями путем добавления и утверждения новых тегов.
Metafiles in GDI+
GDI+ provides the Metafile class so that you can record and display metafiles. A metafile, also called a vector image, is an image that is stored as a sequence of drawing commands and settings. The commands and settings recorded in a Metafile object can be stored in memory or saved to a file or stream.
Metafile Formats
GDI+ can display metafiles that have been stored in the following formats:
Windows Metafile (WMF)
Enhanced Metafile (EMF)
EMF+
GDI+ can record metafiles in the EMF and EMF+ formats, but not in the WMF format.
EMF+ is an extension to EMF that allows GDI+ records to be stored. There are two variations on the EMF+ format: EMF+ Only and EMF+ Dual. EMF+ Only metafiles contain only GDI+ records. Such metafiles can be displayed by GDI+ but not by GDI. EMF+ Dual metafiles contain GDI+ and GDI records. Each GDI+ record in an EMF+ Dual metafile is paired with an alternate GDI record. Such metafiles can be displayed by GDI+ or by GDI.
The following example displays a metafile that was previously saved as a file. The metafile is displayed with its upper-left corner at (100, 100).
public void Example_DisplayMetafile(PaintEventArgs e) { Graphics myGraphics = e.Graphics; Metafile myMetafile = new Metafile("SampleMetafile.emf"); myGraphics.DrawImage(myMetafile, 100, 100); } |
Метафайлы в GDI+
В GDI+ имеется класс Metafile, позволяющий записывать и отображать метафайлы. Метафайл, также называемый векторным рисунком, — это изображение, сохраненное в виде последовательности команд и параметров рисования. Команды и параметры, сохраненные в объекте Metafile, могут быть сохранены в памяти или записаны в файл или в поток.