.EMF вариант №
Расширенный формат метафайла (EMF) сохраняет графические изображения независимо от устройства. Метафайлы EMF состоят из записей переменной длины в хронологическом порядке, которые могут отображать сохраненное изображение после анализа на любом устройстве вывода. Эти записи переменной длины могут быть определениями вложенных объектов, команд для рисования и графических свойств, важных для точного отображения изображения. Когда устройство открывает метафайл EMF, используя собственную графическую среду, пропорции, размеры, цвета и другие графические свойства исходного изображения остаются неизменными независимо от платформы открывающего устройства.
Краткая история
В 1990 году Microsoft разработала формат файла изображения Windows Metafile (WMF) для Microsoft Windows. Метафайлы Windows представляют собой 16-битный формат, который может содержать некоторые компоненты растрового изображения. WMF может состоять из векторной графики и предназначен для обеспечения переносимости между различными приложениями. В 1993 году Win32/GDI анонсировала Enhanced Metafile (EMF), более новую версию с повышенной гибкостью и масштабируемостью. EMF также используется в качестве команд графического языка для запуска драйверов принтера. Microsoft теперь рекомендует расширенный формат метафайла (EMF) вместо формата Windows (WMF). Когда была представлена Windows XP, была выпущена версия Enhanced Metafile Format Plus (EMF+). Эта более новая версия находит свой путь путем сериализации вызовов GDI+ API, а WMF/EMF записывает вызовы GDI. Существует сжатая gzip версия EMF, известная как EMZ.
Формат метафайла EMF
Ниже приведены основные элементы расширенного формата метафайла:
- EMR_HEADER (версия, размер, разрешение картинки при создании)
- Таблица для объектов GDI
- Зарезервированная палитра (опционально)
- Записи метафайла организованы в виде массива (настройки свойств, определенные объекты, команды рисования)
- Запись EMR_EOF (последняя запись в метафайле EMF)
Версии ЭМП
- Исходный: Исходная версия определяет запись, необходимую для сохранения исходного образа и его независимости от устройства. Более того поддерживает запись, содержащую графические объекты и команды для рисования.
- Версия 1: во второй версии EMF улучшена гибкость и независимость от устройства за счет добавления записи для формата пикселей и возможности использования команды OpenGL.
- Версия 2: третья версия повысила точность за счет добавления метрической системы для измерения расстояний до поверхности устройства, что сделало запись более масштабируемой.
Расширенные записи метафайлов
Записи метафайла располагаются в виде массива. Эти записи имеют структуру ENHMETARECORD и переменную длину. ENHMETARECORD указывает данные, которые определяют функции GDI для создания изображения с использованием расширенного формата метафайла. Структура ENHMETAHEADER всегда является первой записью в этом формате. Этот заголовок EMF содержит следующую информацию.
Каждая запись расширенного метафайла имеет в начале два члена EMR (обеспечивает базовую структуру). Первый элемент распознает функцию GDI (в записи используются параметры), которая определяет тип записи и известна как iType. Другой элемент nSize определяет размер каждой записи. Остальные параметры (если есть) и дополнительные данные располагаются сразу под nSize. Сразу за заголовком может быть необязательное текстовое описание. В этом текстовом описании записывается название изображения и автор. Палитра, наличие которой является опцией, определяет цвета, используемые при создании расширенного метафайла. Другие записи используются для указания функции GDI, которая необходима при создании изображения.
В каждом метафайле должна присутствовать хотя бы одна запись EMF. Перемещение информации от одной записи к другой зависит от записей EMF, поэтому эти записи должны располагаться рядом. Для любой данной записи в метафайле, кроме EOF_record, длина этой конкретной записи определяет переход к следующей записи.
Расширенное создание метафайлов
Функция CreateEnhMetaFile используется для создания расширенного метафайла. Аргументы этой функции используются для определения размеров и хранения изображения на диске/в памяти. Кроме того, эта функция требует размер устройства, на котором изображение появилось первым (исходное устройство) и контекст эталонного устройства (DC). Таким образом, аргументы для обработки этого контроллера домена должны предоставляться при вызове функции CreateEnhMetaFile. Синтаксис функции следующий:
HDC CreateEnhMetaFileExample(
HDC hdc,
LPCSTR lptoFilename,
const OVAL *lprc,
LPCSTR lpDesc
);
HDC: дескриптор эталонного устройства.
lptoFilename: указатель на имя файла.
lprc: Указатель на овальную структуру задает размеры изображения в миллиметрах.
lpDesc: указатель на строку для названия изображения и имени приложения, создавшего изображение.
Расширенные операции с метафайлами
Ниже приведены задания, которые можно выполнить с помощью дескриптора расширенного метафайла.
- Отображение и редактирование сохраненного изображения.
- Создание расширенных копий метафайлов.
- Получить копию заголовка EMF, необязательное описание и двоичную версию расширенного метафайла.
- Повторите цвета в палитре.
Графические объекты
В операциях рисования и раскрашивания графические объекты могут создаваться с помощью записей о создании объектов и сохраняться для дальнейшего использования. Запись EMR_SELECTOBJECT
может извлекать эти графические объекты, используя контекст устройства воспроизведения. Перья, палитры, кисти, цветовые пространства, шрифты и стандартные объекты — это некоторые типы повторно используемых объектов.
Порядок байтов
Формат с прямым порядком байтов используется для хранения данных в записях метафайлов.
Версии
Формат файла EMF дважды пересматривался. Измененные версии являются исходными, расширением 1 и расширением 2. В расширенных версиях предусмотрены записи OpenGL и необязательный дескриптор для внутреннего формата пикселей. Для отображаемых размеров добавлено средство измерения в миллилитрах.