Метафайл windows что это
Перейти к содержимому

Метафайл windows что это

  • автор:

Формат файла WMF — описание, как открыть?

Файлы формата WMF открываются специальными программами. Существует 2 типа форматов WMF, каждый из которых открывается разными программами. Чтобы открыть нужный тип формата, изучите описания файлов и скачайте одну из предложенных программ.

Чем открыть файл в формате WMF

Собственный формат графики Windows, разработанный компанией Microsoft. Содержит наборы чертежных операций, включая команды для черчения линий, окружностей и прямоугольников. Может также содержать операции черчения побитовой графики. Используется преимущественно для векторных изображений, но может такж включать в себя астровую графику.

Файлы WMF изначально появились в 1988 году с выпуском Windows 2.0. Позднее компания Microsoft выпустила спецификацию формата файла WMF с Windows 3.1 в 1992 году, а еще позже обновление в 2006 году.

Файлы WMF в основном были заменены стандартными форматами, такими как .JPG и .GIF. Формат WMF все еще поддерживается разными программами, включая Windows Photo Viewer от Microsoft, которая входит в состав Windows 7.

WMF Расширение файла

Собственный графический формат Windows, разработанный Microsoft; содержит последовательность операций рисования, включая команды для рисования линий, окружностей и прямоугольников; может также содержать растровые операции рисования; используется в основном для векторных изображений, но может также включать растровую графику.

Файлы WMF первоначально появились в 1988 году с выпуском Windows 2.0. Позже Microsoft опубликовала спецификацию формата файлов WMF с выпуском Windows 3.1 в 1992 году, а затем опубликовала последующую спецификацию в 2006 году.

Файлы WMF были в основном заменены более стандартными форматами, такими как .JPG и .GIF. картинки. Формат WMF по-прежнему поддерживается различными программами, в том числе Windows Photo Viewer от Microsoft, которая включена в Windows 7.

Метафайл Windows — Windows Metafile

Метафайл Windows ( WMF ) — это формат файла изображения, изначально разработанный для Microsoft Windows в 1990-х годах. Исходный формат метафайла Windows не был независимым от устройства (хотя его можно было сделать еще лучше с помощью заголовков размещения) и мог содержать компоненты как векторной графики, так и растровые . Он действует аналогично файлам SVG . Файлы WMF позже были заменены расширенными метафайлами (файлы EMF), которые действительно обеспечивали независимость от устройства. Затем файлы EMF были улучшены с помощью файлов EMF + .

По сути, метафайл хранит список записей, состоящий из команд рисования, определений свойств и графических объектов для отображения изображения на экране. Используемые команды рисования тесно связаны с командами API интерфейса графического устройства (GDI), используемыми для рисования в Microsoft Windows.

Существует три основных типа метафайлов — WMF — это 16-разрядный формат, представленный в Windows 3.0 . Это собственный векторный формат для приложений Microsoft Office, таких как Word , PowerPoint и Publisher . Начиная с 2017 г. 14 версия спецификации формата метафайлов Windows доступна для чтения в Интернете или для загрузки в формате PDF. Файлы EMF, которые заменили файлы WMF, работают по тому же принципу, только это 32-битный формат файла, который также позволяет встраивать личные данные в записи «комментариев». EMF + — это расширение для файлов EMF, встроенное в эти записи комментариев, позволяющее использовать для изображений и текста команды, объекты и свойства, аналогичные Windows GDI + .

СОДЕРЖАНИЕ

История

Исходный 16-битный формат файла WMF был полностью определен в томе 4 документации Windows 3.1 SDK 1992 г. (по крайней мере, если он был объединен с описаниями отдельных функций и структур в других томах), но эта спецификация была расплывчатой ​​в отношении некоторых деталей. Эти пособия были опубликованы в виде печатных книг , доступных в книжных магазинах, не имеющих клик через EULA или других ограничений необычна лицензирования (только общее предупреждение , что если они были приобретены в рамках пакета программного обеспечения, программное обеспечение будет распространяться на один).

Со временем о существовании этой исторической спецификации было в значительной степени забыто, и некоторые альтернативные реализации прибегли к обратному проектированию, чтобы выяснить формат файла из существующих файлов WMF, что было сложно и подвержено ошибкам. В сентябре 2006 года Microsoft снова опубликовала спецификацию формата файлов WMF в более полной форме в контексте Microsoft Open Specification Promise , пообещав не отстаивать патентные права разработчикам форматов файлов.

Позднее Microsoft отказалась от файлов WMF в пользу 32-битных файлов EMF, поскольку файлы WMF имели реальные проблемы с независимостью от устройства, несмотря на использование «размещаемого» заголовка файла, который обеспечивал базовую независимость от устройства. Microsoft обнаружила, что разработчики, которые используют этот формат, «[встраивают] приложение, расположение или масштабируют комментарии в метафайлы . Другие добавляли заголовки в метафайл, который предоставляет различную информацию о приложении», что вызывает серьезные проблемы совместимости. Так, в 1992 году с Windows NT 3.1 Microsoft представила формат расширенного метафайла (EMF) — формат, основанный на API Win32 и обеспечивающий независимость от устройств. — они также были известны как метафайлы NT. С выпуском Windows XP и GDI + набор записей пришлось значительно увеличить, и поэтому Microsoft выпустила EMF + как расширение существующего формата файлов EMF.

Структура метафайла

Файлы WMF, EMF и EMF + состоят из серии записей, которые воспроизводятся для получения графического вывода. Некоторые записи определяют объекты, которые могут указывать графические объекты, используемые для определения способа рисования графики (например, перья определяют цвет и ширину линий). Каждый из этих объектов хранится в метафайлах и помещается в таблицу объектов, которая отслеживает использование графических объектов при обработке метафайла. Таблица объектов — это ассоциативный массив индексов структур графических объектов, определенных в метафайле.

Файлы WMF и EMF обрабатывают объектную обработку иначе, чем записи EMF + в файлах EMF. В процессе обработки файлов WMF и EMF записи считываются в таблицу объектов после определения объекта. Если объект удален, объект удаляется из таблицы, и идентификатор можно использовать повторно. Примечательно, что объект не будет использоваться, пока он не будет специально выбран во время воспроизведения записи. Это отличается от файлов EMF +, которые также используют ассоциативный массив через хэш-карту, которая записывает объект вместе с идентификатором объекта. Однако, в отличие от файлов WMF и EMF, которые могут удалять объект, когда создается новый объект, имеющий тот же индекс, что и существующий объект, запись в таблице заменяется новым объектом. EMF-файлу также не нужно специально выбирать объект перед его использованием.

Файлы WMF изначально не проектировались как независимые от устройств, что означает, что вы не могли воспроизводить файл на устройствах вывода, которые отличались от исходного устройства, на котором файл был записан. Частичное решение этой проблемы было изобретено корпорацией Aldus , которая добавила дополнительный «размещаемый» заголовок, названный «заголовком APM», который добавил ограничивающий прямоугольник, версию метафайла, размер метафайла, количество объектов в метафайле и размер. самой большой отдельной записи в метафайле. Позднее он был включен в формат WMF компанией Microsoft, начиная с Windows 2000.

Файлы WMF структурированы серией записей, начиная с нескольких контрольных записей: записи заголовка, вышеупомянутой необязательной размещаемой записи и заканчивая записью конца файла .

Контрольные записи инкапсулируют записи, составляющие само изображение. Эти записи работают в так называемом контексте устройства воспроизведения , который представляет собой набор свойств и объектов, составляющих графическую среду устройства, когда метафайл «воспроизводится» на этом устройстве вывода.

Записи, отличные от записей управления, могут быть в значительной степени сгруппированы в записи растровых изображений, записи чертежей, записи объектов, записи состояния и записи перехода.

Записи растровых изображений

Записи Bitmap управляют и выводят растровые изображения .

Имя Описание
META_BITBLT Определяет, как выполнить передачу битового блока . Эти записи могут указывать растровое изображение для использования в качестве источника или регион.
META_DIBBITBLT Определяет, как выполнить передачу битового блока не зависящего от устройства растрового изображения. Эти записи могут указывать растровое изображение для использования в качестве источника или регион.
META_DIBSTRETCHBITBLT Определяет, как выполнить передачу битового блока не зависящего от устройства растрового изображения, но допускает расширение или сжатие изображения. Эти записи могут указывать растровое изображение для использования в качестве источника или регион.
META_SETDIBTODEV Задает цвет для установки блока пикселей в растровом изображении, не зависящем от устройства. Эти записи могут указывать растровое изображение для использования в качестве источника или регион.
META_STRETCHBLT Определяет, как выполнить передачу битового блока, но допускает расширение или сжатие изображения.
META_STRETCHDIB Определяет, как выполнить передачу битового блока не зависящего от устройства растрового изображения, но допускает расширение или сжатие изображения. Эти записи могут указывать растровое изображение для использования в качестве источника или регион.
Записи чертежей

Записи чертежей производят вывод графики.

Имя Описание
META_ARC Рисует эллиптическую дугу .
META_CHORD Рисует аккорд .
META_ELLIPSE Рисует эллиптическую дугу .
META_EXTFLOODFILL Заполняет область кистью.
META_EXTTEXTOUT Нарисуйте текст со шрифтом, цветом фона и цветом текста в контексте устройства воспроизведения.
META_FILLREGION Заполняет область указанной кистью.
META_FLOODFILL Заполняет область кистью.
META_FRAMEREGION Обводит кистью границу вокруг области страницы.
МЕТА_ИНВЕРТРЕГИОН Закрашивает область изображения инвертированными цветами.
META_LINETO Рисует полуоткрытую линию от позиции рисования, определенной в контексте устройства воспроизведения, до указанной точки.
META_PAINTREGION Нарисуйте область текущей кистью, указанной в контексте устройства воспроизведения.
META_PATBLT Нарисуйте область текущей кистью, указанной в контексте устройства воспроизведения, а затем объедините цвет кисти и цвет (а) поверхности с помощью растровой операции .
META_PIE Нарисуйте клин в форме пирога, ограниченный пересечением эллипса и двух радиалов — линия задается пером, заданным через контекст устройства воспроизведения, а область, ограниченная формой пирога, заполняется текущей кистью устройства воспроизведения. контекст.
МЕТА_POLYLINE Рисует серию сегментов линий, соединяя точки в указанном массиве.
МЕТА_ПОЛИГОН Рисует многоугольник, состоящий из двух или более вершин, соединенных прямыми линиями. Многоугольник обводится пером и заполняется с помощью кисти и режима заливки многоугольника, которые определены в контексте устройства воспроизведения.
МЕТА_POLYPOLYGON Рисует серию замкнутых многоугольников, которые могут перекрываться. Каждый многоугольник обводится пером и заполняется с помощью кисти и режима заливки многоугольника, которые определены в контексте устройства воспроизведения.
META_RECTANGLE Закрашивает прямоугольник, очерченный пером, заполненный кистью и заполненный кистью, определенной в контексте устройства воспроизведения.
META_ROUNDRECT Закрашивает прямоугольник со скругленными углами. Прямоугольник обводится пером, заполняется кистью и заполняется кистью, определенной в контексте устройства воспроизведения.
META_SETPIXEL Устанавливает пиксель с указанными координатами на указанный цвет.
META_TEXTOUT Выводит строку символов в указанном месте, используя шрифт, цвет фона и цвет текста, которые определены в контексте устройства воспроизведения.
Записи об объектах

Записи объектов создают графические объекты и управляют ими. В файлах WMF есть две широкие категории объектов — графические объекты и объекты структуры. Объекты структуры не создаются и не удаляются в WMF явно, а вместо сложных структур. Например, BitmapCoreHeader содержит информацию о размерах и цветовом формате независимого от устройства растрового изображения, которое само является частью объекта DeviceIndependentBitmap. Графический объект, однако, определяет параметры для вывода графики, а во время воспроизведения WMF он устанавливает контекст устройства воспроизведения.

Графическими объектами могут быть кисти (определяет стиль, цвет и узор кисти, которые определяют, как рисовать область графики), шрифты (определяют свойства, которые влияют на отображение текста), палитры (задают цвета как значения, не зависящие от устройства, определяется приложением), перьями (задает графические атрибуты линии) и областями (которые определяют сегменты линии и кривой, определяющие форму).

Имя Описание
META_CREATEBRUSHINDIRECT Создает объект кисти из объекта LogBrush (логическая кисть).
META_CREATEFONTINDIRECT Создает объект кисти из объекта шрифта.
META_CREATEPALETTE Создает объект палитры.
META_CREATEPATTERNBRUSH Создает объект кисти из объекта LogBrush (логическая кисть).
META_CREATEPENINDIRECT Создает объект пера.
META_CREATEREGION Создает объект региона.
META_DELETEOBJECT Удалить объект.
META_CREATEBRUSHINDIRECT Создает объект кисти из объекта LogBrush (логическая кисть).
META_DIBCREATEPATTERNBRUSH Создает объект кисти из независимого от устройства растрового изображения.
META_SELECTCLIPREGION Определяет объект области, который будет текущей областью отсечения .
META_SELECTOBJECT Выбирает объект, который будет текущим объектом для контекста устройства воспроизведения, который работает со всеми графическими объектами, кроме объектов палитры, которые должны быть установлены с помощью META_SELECTPALETTE.
META_SELECTPLAETTE Выбирает логическую палитру для контекста устройства воспроизведения.
Государственные записи

Записи состояния управляют графическими свойствами контекста устройства воспроизведения.

Имя Описание
META_ANIMATEPALETTE Переопределяет записи в логической палитре, которая определена в контексте устройства воспроизведения с помощью указанного объекта палитры.
META_EXCLUDECLIPRECT Устанавливает область отсечения, которая определена в контексте устройства воспроизведения, равной существующей области отсечения за вычетом указанного прямоугольника.
META_INTERSECTCLIPRECT Устанавливает область отсечения, которая определена в контексте устройства воспроизведения, на пересечение существующей области отсечения и указанного прямоугольника.
META_MOVETO Устанавливает позицию вывода в контексте устройства воспроизведения в указанную точку.
META_OFFSETCLIPRGN Перемещает область отсечения, определенную в контексте устройства воспроизведения, на указанные смещения.
META_OFFSETVIEWPORTORG Перемещает начало координат области просмотра в контексте устройства воспроизведения на заданные горизонтальные и вертикальные смещения.
META_OFFSETWINDOWORG Перемещает исходную точку окна вывода в контексте устройства воспроизведения на заданные горизонтальные и вертикальные смещения.
META_REALIZEPALETTE Сопоставляет записи из логической палитры, которая определена в контексте устройства воспроизведения, с системной палитрой.
META_RESIZEPALETTE Переопределяет размер логической палитры, определенной в контексте устройства воспроизведения.
META_RESTOREDC Восстанавливает контекст устройства воспроизведения из ранее сохраненного контекста устройства.
META_SAVEDC Сохраняет контекст устройства воспроизведения для последующего извлечения.
META_SCALEVIEWPORTEXT Масштабирует горизонтальную и вертикальную границы области просмотра, которая определена в контексте устройства воспроизведения, с использованием соотношений, образованных указанными множителями и делителями.
META_SCALEWINDOWEXT Масштабирует горизонтальные и вертикальные размеры окна вывода, которое определено в контексте устройства воспроизведения, с использованием соотношений, образованных указанными множителями и делителями.
META_SETBKCOLOR Устанавливает заданный цвет фона в контексте устройства воспроизведения.
META_SETBKMODE Устанавливает режим фонового микширования в контексте устройства воспроизведения.
META_SETLAYOUT Определяет ориентацию макета в контексте устройства воспроизведения.
META_SETMAPMODE Определяет режим сопоставления в контексте устройства воспроизведения.
META_SETMAPPERFLAGS Определяет алгоритм, который использует средство сопоставления шрифтов при сопоставлении логических шрифтов с физическими шрифтами.
META_SETPALENTRIES Определяет значения цвета RGB в диапазоне записей в логической палитре, которая определяется в контексте устройства воспроизведения.
META_SETPOLYFILLMODE Определяет режим заливки многоугольника в контексте устройства воспроизведения для графических операций, заполняющих многоугольники.
META_SETRELABS Неиспользованная запись.
META_SETROP2 Определяет режим смешивания работы с растром переднего плана в контексте устройства воспроизведения.
META_SETSTRETCHBLTMODE Определяет режим растяжения растрового изображения в контексте устройства воспроизведения.
META_SETTEXTALIGN Определяет значения выравнивания текста в контексте устройства воспроизведения.
META_SETTEXTCHAREXTRA Определяет межсимвольный интервал для выравнивания текста в контексте устройства воспроизведения.
META_SETTEXTCOLOR Определяет цвет текста переднего плана в контексте устройства воспроизведения.
META_SETTEXTJUSTIFICATION Определяет количество места, которое нужно добавить для разрыва символов в строке выровненного текста.
META_SETVIEWPORTEXT Определяет горизонтальную и вертикальную границы области просмотра в контексте устройства воспроизведения.
META_SETVIEWPORTORG Определяет источник области просмотра в контексте устройства воспроизведения.
META_SETWINDOWEXT Определяет горизонтальные и вертикальные размеры окна вывода в контексте устройства воспроизведения.
META_SETWINDOWORG Определяет источник окна вывода в контексте устройства воспроизведения.
Записи о побегах

Escape-записи — это средство расширения функциональности метафайлов с помощью записей, которые иначе не определены как тип записи WMF. Каждая escape-запись содержит функцию записи, escape-функцию и потенциально escape-данные.

Следующие escape-записи составляют файл WMF.

Имя Описание
ABORTDOC Останавливает обработку текущего документа.
BEGIN_PATH Открывает путь.
CHECK_JPEGFORMAT Определяет, может ли он обрабатывать данное изображение JPEG .
CHECK_PNGFORMAT Определяет, может ли он обрабатывать данное изображение PNG .
CLIP_TO_PATH Применяет функцию к текущему контуру обрезки PostScript .
CLOSE_CHANNEL То же, что и ENDDOC.
DOWNLOAD_FACE Устанавливает имя шрифта на устройстве вывода.
DOWNLOAD_HEADER Загружает наборы процедур PostScript.
DRAW_PATTERNRECT Рисует прямоугольник с заданным узором.
ENCAPSULATED_POSTSCRIPT Отправляет произвольные инкапсулированные данные PostScript (EPS) непосредственно в драйвер принтера.
END_PATH Заканчивает путь.
ENDDOC Уведомляет драйвер принтера о завершении нового задания на печать.
EPS_PRINTING Указывает начало и конец печати EPS.
EXTTEXTOUT Рисует текст, используя текущий выбранный шрифт, цвет фона и цвет текста.
GET_COLORTABLE Получает значения таблицы цветов из драйвера принтера.
GET_DEVICEUNITS Получает единицы устройства, в настоящее время настроенные на устройстве вывода.
GET_EXTENDED_TEXTMETRICS Получает расширенные текстовые метрики, которые в настоящее время настроены в драйвере принтера.
GET_FACENAME Получает имя шрифта, настроенное в настоящее время на устройстве вывода.
GET_PAIRKERNTABLE Получает таблицу ядра шрифтов, которая в настоящее время определена на устройстве вывода.
GET_PHYSPAGESIZE Извлекает физический размер страницы, выбранный в данный момент на устройстве вывода.
GET_PRINTINGOFFSET Извлекает смещение от верхнего левого угла физической страницы, где начинается фактическая печать или рисование.
GET_PS_FEATURESETTING Запрашивает драйвер принтера для получения информации о функциях PostScript, поддерживаемых устройством вывода.
GET_SCALINGFACTOR Извлекает коэффициенты масштабирования для оси x и оси y принтера.
META_ESCAPE_ENHANCED_METAFILE Используется для встраивания метафайла EMF в метафайл WMF.
МЕТАФИЛЬ_ДРАЙВЕР Запрашивает драйвер принтера о поддержке метафайлов на устройстве вывода.
NEWFRAME Уведомляет драйвер принтера о том, что приложение завершило запись на страницу.
NEXTBAND Уведомляет драйвер принтера о том, что приложение завершило запись в полосу.
ПРОЙТИ ЧЕРЕЗ Передает произвольные данные драйверу принтера.
POSTSCRIPT_DATA Отправляет произвольные данные PostScript на устройство вывода.
POSTSCRIPT_IDENTIFY Устанавливает драйвер принтера в режим PostScript или GDI.
POSTSCRIPT_IGNORE Сообщает устройству вывода игнорировать данные PostScript.
POSTSCRIPT_INJECTION Вставляет блок необработанных данных в поток PostScript.
POSTSCRIPT_PASSTHROUGH Отправляет произвольные данные непосредственно в драйвер принтера, который, как ожидается, будет обрабатывать эти данные только в режиме PostScript.
OPEN_CHANNEL Действует так же, как STARTDOC, с документом NULL и выходным именем файла, а также данными в необработанном режиме.
QUERY_DIBSUPPORT Запрашивает драйвер принтера о поддержке DIB на устройстве вывода.
QUERY_ESCSUPPORT Запрашивает драйвер принтера, чтобы определить, поддерживается ли конкретная escape-функция WMF на устройстве вывода.
SET_COLORTABLE Устанавливает значения таблицы цветов.
SET_COPYCOUNT Устанавливает количество копий.
SET_LINECAP Задает режим окончания строки для использования при выводе на устройство вывода.
SET_LINEJOIN Задает режим соединения линий для использования при рисовании на устройстве вывода.
SET_MITERLIMIT Устанавливает предел длины угловых соединений для использования в чертеже на устройстве вывода.
SPCLPASSTHROUGH2 Позволяет документам включать частные процедуры и другие произвольные данные в документы.
STARTDOC Уведомляет драйвер принтера о запуске нового задания на печать.

Была обнаружена серьезная уязвимость в escape-записях вокруг escape-записи Abort, которая хранит код процедуры отмены внутри самой записи. Это затронуло системы Windows (см. CVE — 2005-4560 ) и проект Wine (см. CVE — 2006-0106 ). Согласно Secunia , «уязвимость вызвана ошибкой в ​​обработке файлов метафайлов Windows (‘.wmf’), содержащих специально созданные записи SETABORTPROC ‘Escape’. Такие записи позволяют выполнять произвольные пользовательские функции при отображении файл WMF не работает «. Согласно документации SDK Windows 3.1, escape-код SETABORTPROC был устаревшим и заменен одноименной функцией в Windows 3.1, задолго до того, как была обнаружена уязвимость WMF. Однако устаревший escape-код был сохранен для совместимости с 16-битными программами, написанными для (или, по крайней мере, обратно совместимыми с) Windows 3.0. Это изменение произошло примерно в то же время, когда Microsoft создавала 32-битную повторную реализацию GDI для Windows NT, и вполне вероятно, что уязвимость возникла во время этой попытки.

После того, как Стив Гибсон обвинил Microsoft в преднамеренном внедрении бэкдора в свой код, Марк Руссинович представил опровержение и заявил, что:

. все было по-другому, когда создавался формат. В Windows 3.1 код модели «большой» памяти по своей сути не зависит от местоположения, и Windows никогда не обновлялась, поэтому и Windows, и приложение могли просто скопировать функцию приложения в файл WMF и предположить, что она будет работать при воспроизведении одним и тем же приложением в более поздний сеанс запуска. В любом случае неясно, предполагали ли разработчики приложения, создающие метафайлы на диске с процедурами прерывания. Кроме того, как Стивен Тулуза из Microsoft указал в опровержении заявлений Стива в Microsoft , ландшафт безопасности в начале 1990-х сильно отличался от сегодняшнего, и всему коду, включая тот, который хранится в файле WMF, по своей сути доверяли.

Питер Ферри из Symantec Security Response, США, также не согласен с Гибсоном, отметив, что:

Гибсон утверждал, что создается поток для запуска обработчика SetAbortProc. Фактически, никакой поток для запуска обработчика не создается — это обратный вызов, который вызывается парсером, и синтаксический анализатор должен ждать, пока обратный вызов не вернется, иначе весь смысл функции (для прерывания печати) теряется. . По его собственному признанию, Гибсон не читал документацию (на самом деле он утверждал, что не мог ее найти, хотя она находится в свободном доступе на веб-сайте Microsoft), и он утверждал, что контекст устройства недоступен для обработчика функций. . Конечно, контекст устройства доступен обработчику функции — это один из двух параметров, которые ему передаются (см. Выше), и он необходим для прерывания печати. Наконец, Гибсон заявил, что поток управления не может вернуться в Windows. Дело просто в том, что функция возвращает и отбрасывает параметры, которые были переданы в стек. Если запись сформирована правильно, Windows продолжит анализ файла, как и раньше. . Гибсон признается, что догадывался о нескольких вещах. К сожалению, он плохо угадал. Думаю, теперь мы знаем лучше.

Файлы EMF имеют три возможных версии заголовков. Исходные заголовки — это просто контейнер для изображений, вторая и третья версии инкапсулируют исходный заголовок и содержат запись формата пикселей и поддержку записей OpenGL, а третья версия инкапсулирует второе расширение заголовка и увеличивает точность EMF и масштабируемость EMF, поскольку это добавляет возможность измерения расстояний до поверхностей устройства в метрической системе.

Каждый заголовок EMF начинается с записи EMR_HEADER и записывает соответствующие свойства устройства, на котором было записано изображение метафайла. Исходный заголовок EMF имеет 80-байтовый заголовок и дополнительную строку описания переменной длины. Другие метафайлы содержат поля расширения, которые инкапсулируют исходный заголовок. EmfMetafileHeaderExtension1 — это запись, которая вставляется непосредственно после исходного заголовка EMF, указывает, есть ли дескриптор формата пикселей и смещение объекта дескриптора в заголовке, а также поле, которое указывает, существуют ли записи OpenGL в метафайле. Дескриптор формата пикселя определяет возможности поверхности рисования и то, закодирован ли пиксель в RGBA или является индексом в таблице цветов. EmfMetafileHeaderExtension2 — это запись, которая вставляется сразу после EmfMetafileHeaderExtension1 записи, и она содержит два поля со значениями X и Y для измерения поверхности устройства в микрометрах.

Как и файлы WMF, записи можно классифицировать по функциям, однако в файлах EMF больше типов записей, чем в файлах WMF. Записи могут быть классифицированы как элементы управления, растровые изображения, обрезки, комментарии, рисование, экранирование, создание объекта, манипулирование объектами, OpenGL, скобки пути, записи состояния и преобразования.

С выпуском Windows XP , в Enhanced Metafile Format Plus Extensions формат (EMF +) был введен. EMF + предоставляет способ сериализации вызовов API GDI + таким же образом, как WMF / EMF хранит вызовы GDI.

Существуют также сжатые версии метафайлов Windows, известные как сжатый метафайл Windows (WMZ) и сжатый расширенный метафайл Windows (EMZ), которые в основном представляют собой сжатые с помощью gzip файлы WMF и EMF соответственно.

Реализации

Формат WMF был разработан для выполнения слоем Windows GDI для восстановления изображения , но поскольку двоичные файлы WMF содержат определение графических примитивов GDI, составляющих это изображение, можно разработать альтернативные библиотеки, которые отображают двоичный файл WMF. файлы или конвертировать их в другие графические форматы.

Windows Metafile

WMF (англ.  Windows MetaFile ) — универсальный формат векторных графических файлов для Windows приложений. Используется для хранения коллекции графических изображений Microsoft Clip Gallery. Формат разработан Microsoft и является неотъемлемой частью Windows, так как сохраняет последовательность аппаратно-независимых функций GDI (Graphical Device Interface), непосредственно выводящих изображение в заданный контекст графического устройства (на экран, на принтер и т.п.). Очень часто WMF неявно используется для сохранения образа окна вывода программы и его последующего восстановления, а также при переносе информации через буфер обмена (clipboard). Из MS Windows запись и чтение в файл этого формата осуществляются чрезвычайно просто и быстро. Файл этого формата может быть открыт с помощью кроссплатформенных программ GIMP (с предварительной растеризацией) и Inkscape. На платформе Macintosh аналогичную роль играет формат PICT.

Как формат векторной графики WMF в той или иной степени поддерживается многими мощными приложениями — AutoCAD, OpenOffice.org, и может использоваться для обмена данными между ними.

Структура файла

Файлы WMF и EMF состоят из списка записей, каждая из которых представляет собой определённую команду с набором аргументов. Форматы записей WMF и EMF похожи, однако есть следующие основные различия:

  • В EMF добавились новые коды функций
  • В EMF коды функций изменились по сравнению с WMF
  • Аргументы, бывшие в WMF 16-битными, стали 32-битными в EMF
  • В некоторых функциях в EMF добавились новые аргументы

Список типов записей WMF и EMF

WMF-запись Код WMF-записи EMF-запись Код EMF-записи Описание
EMR_HEADER 0x00000001 Заголовок
EMR_POLYBEZIER 0x00000002
EMR_POLYBEZIER16 0x00000055
META_POLYGON 0x0324 EMR_POLYGON 0x00000003 Нарисовать замкнутую ломаную линию
EMR_POLYGON16 0x00000056
META_POLYLINE 0x0325 EMR_POLYLINE 0x00000004
EMR_POLYLINE16 0x00000057
EMR_POLYBEZIERTO 0x00000005
EMR_POLYBEZIERTO16 0x00000058
META_POLYPOLYGON 0x0538 EMR_POLYPOLYGON 0x00000008
EMR_POLYPOLYGON16 0x0000005B
META_SETWINDOWEXT 0x020C EMR_SETWINDOWEXTEX 0x00000009 Установить размеры окна (ширину и высоту)
META_SETWINDOWORG 0x020B EMR_SETWINDOWORGEX 0x0000000A Установить позицию левого верхнего угла окна (x и y)
META_SETVIEWPORTEXT 0x020E EMR_SETVIEWPORTEXTEX 0x0000000B Установить размеры устройства вывода (ширину и высоту)
META_SETVIEWPORTORG 0x020D EMR_SETVIEWPORTORGEX 0x0000000C Установить позицию левого верхнего угла устройства вывода (x и y)
EMR_SETBRUSHORGEX 0x0000000D
META_EOF 0x0000 EMR_EOF 0x0000000E Конец файла
EMR_SETPIXELV 0x0000000F
META_SETMAPPERFLAGS 0x0231 EMR_SETMAPPERFLAGS 0x00000010
META_SETMAPMODE 0x0103 EMR_SETMAPMODE 0x00000011 Задаёт режим преобразования логических единиц измерения окна в единицы измерения устройства вывода
META_SETBKMODE 0x0102 EMR_SETBKMODE 0x00000012 Установить режим заливки (0 — заливка выключена, 1 — заливка включена)
META_SETPOLYFILLMODE 0x0106 EMR_SETPOLYFILLMODE 0x00000013
META_SETROP2 0x0104 EMR_SETROP2 0x00000014 Установить логическую операцию при рисовании (для накладывания прозрачного/инвертирующего изображения и т.п.)
META_SETSTRETCHBLTMODE 0x0107 EMR_SETSTRETCHBLTMODE 0x00000015
META_SETTEXTALIGN 0x012E EMR_SETTEXTALIGN 0x00000016 Установить горизонтальное и вертикальное выравнивание (задаётся при помощи флагов, объединённых через логическое ИЛИ)
EMR_SETCOLORADJUSTMENT 0x00000017
META_SETTEXTCOLOR 0x0209 EMR_SETTEXTCOLOR 0x00000018 Установить цвет текста (32-битный RGB0)
META_SETBKCOLOR 0x0201 EMR_SETBKCOLOR 0x00000019 Установить цвет заливки (32-битный RGB0)
META_OFFSETCLIPRGN 0x0220 EMR_OFFSETCLIPRGN 0x0000001A
META_MOVETO 0x0214 EMR_MOVETOEX 0x0000001B
META_EXCLUDECLIPRECT 0x0415 EMR_EXCLUDECLIPRECT 0x0000001D
META_INTERSECTCLIPRECT 0x0416 EMR_INTERSECTCLIPRECT 0x0000001E
META_SCALEVIEWPORTEXT 0x0412 EMR_SCALEVIEWPORTEXTEX 0x0000001F Растянуть устройство вывода по горизонтали и вертикали (указывается два дробных множителя, по x и по y, каждый в виде двух целых чисел — числителя и знаменателя дроби)
META_SCALEWINDOWEXT 0x0410 EMR_SCALEWINDOWEXTEX 0x00000020 Растянуть окно по горизонтали и вертикали (указывается два дробных множителя, по x и по y, каждый в виде двух целых чисел — числителя и знаменателя дроби)
META_RESTOREDC 0x0127 EMR_RESTOREDC 0x00000022 Восстановить состояние устройства вывода в заранее сохранённое командой SAVEDC
META_SELECTOBJECT 0x012D EMR_SELECTOBJECT 0x00000025
META_CREATEBRUSHINDIRECT 0x02FC EMR_CREATEBRUSHINDIRECT 0x00000027
META_DELETEOBJECT 0x01f0 EMR_DELETEOBJECT 0x00000028
EMR_ANGLEARC 0x00000029
META_ELLIPSE 0x0418 EMR_ELLIPSE 0x0000002A
META_RECTANGLE 0x041B EMR_RECTANGLE 0x0000002B
META_ROUNDRECT 0x061C EMR_ROUNDRECT 0x0000002C
META_ARC 0x0817 EMR_ARC 0x0000002D
META_CHORD 0x0830 EMR_CHORD 0x0000002E
META_PIE 0x081A EMR_PIE 0x0000002F
META_SELECTPALETTE 0x0234 EMR_SELECTPALETTE 0x00000030
META_CREATEPALETTE 0x00f7 EMR_CREATEPALETTE 0x00000031
META_SETPALENTRIES 0x0037 EMR_SETPALETTEENTRIES 0x00000032 Установить палитру
META_RESIZEPALETTE 0x0139 EMR_RESIZEPALETTE 0x00000033
META_EXTFLOODFILL 0x0548 EMR_EXTFLOODFILL 0x00000035
META_LINETO 0x0213 EMR_LINETO 0x00000036
EMR_ARCTO 0x00000037
EMR_SETARCDIRECTION 0x00000039
EMR_SETMITERLIMIT 0x0000003A
EMR_STROKEPATH 0x00000040
EMR_COMMENT 0x00000046
META_FILLREGION 0x0228 EMR_FILLRGN 0x00000047
META_INVERTREGION 0x012A EMR_INVERTRGN 0x00000049 Обратить цвета в регионе, заданном объединением множества прямоугольников
META_PAINTREGION 0x012B EMR_PAINTRGN 0x0000004A
META_SELECTCLIPREGION 0x012C EMR_EXTSELECTCLIPRGN 0x0000004B
META_BITBLT 0x0922 EMR_BITBLT 0x0000004C
META_STRETCHBLT 0x0B23 EMR_STRETCHBLT 0x0000004D
META_SETDIBTODEV 0x0d33 EMR_SETDIBITSTODEVICE 0x00000050
META_DIBSTRETCHBLT 0x0b41 EMR_STRETCHDIBITS 0x00000051
META_CREATEFONTINDIRECT 0x02FB EMR_EXTCREATEFONTINDIRECTW 0x00000052
META_CREATEPENINDIRECT 0x02FA EMR_EXTCREATEPEN 0x0000005F
EMR_SETICMMODE 0x00000062
EMR_CREATECOLORSPACE 0x00000063
EMR_SETCOLORSPACE 0x00000064
EMR_DELETECOLORSPACE 0x00000065
EMR_GLSRECORD 0x00000066
EMR_GLSBOUNDEDRECORD 0x00000067
EMR_PIXELFORMAT 0x00000068
EMR_FORCEUFIMAPPING 0x0000006D
EMR_COLORCORRECTPALETTE 0x0000006F
EMR_SETICMPROFILEA 0x00000070
EMR_SETICMPROFILEW 0x00000071
META_SETLAYOUT 0x0149 EMR_SETLAYOUT 0x00000073 Задаёт направление вывода текста и изображений — слева-направо или справа-налево (в последнем случае можно указать, требуется ли выводить изображения отражёнными слева-направо)
EMR_GRADIENTFILL 0x00000076
EMR_SETLINKEDUFIS 0x00000077
META_SETTEXTJUSTIFICATION 0x020A EMR_SETTEXTJUSTIFICATION 0x00000078
META_REALIZEPALETTE 0x0035
META_SETRELABS 0x0105
META_SETTEXTCHAREXTRA 0x0108
META_DIBCREATEPATTERNBRUSH 0x0142
META_OFFSETVIEWPORTORG 0x0211
META_OFFSETWINDOWORG 0x020F
META_FLOODFILL 0x0419
META_FRAMEREGION 0x0429
META_ANIMATEPALETTE 0x0436
META_TEXTOUT 0x0521
META_SETPIXEL 0x041F
META_PATBLT 0x061D
META_SAVEDC 0x001E Сохранить состояние устройства вывода
META_ESCAPE 0x0626
META_DIBBITBLT 0x0940
META_EXTTEXTOUT 0x0a32
META_STRETCHDIB 0x0f43
META_CREATEPATTERNBRUSH 0x01F9
META_CREATEREGION 0x06FF

Ссылки

      (англ.)   (англ.)

Без потерь: BMP • FPX • GIF • ICO • ILBM • JBIG • PCX • PNG • PNM • PSD • RAW • TGA • WBMP • XCF • Включая сжатие с потерями: EXR • ICER • JBIG2 • JPEG / JP2 / JPEG-LS • JPEG XR (HD Photo) • PGF (англ.) • TIFF • WebP • Анимационные: APNG • GIF • MNG

AI • CDR • EMF • EPS • PS • SVG • WMF • XPS • Анимационные: SVG • SWF • 3D: 3DS • VRML • X3D

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *