Что такое windows metafile

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

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

По сути, метафайл хранит список записей, состоящий из команд рисования, определений свойств и графических объектов для отображения изображения на экране. Используемые команды рисования тесно связаны с командами интерфейса графического устройства (GDI) API , используемых для рисования в 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) — формат, основанный на Win32 API, с которым они встроили независимость от устройств. . — они также были известны как метафайлы NT. С выпуском Windows XP и GDI + набор записей пришлось значительно увеличить, и поэтому Microsoft выпустила EMF + как расширение существующего формата файлов EMF.

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

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

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

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

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

Читайте также:  Как изменить версию windows 10 без переустановки системы

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

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

Записи растрового изображения

Управление записями растрового изображения и вывод растровых изображений .

Имя Описание
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_INVERTREGION Закрашивает область изображения инвертированными цветами.
META_LINETO Рисует полуоткрытый линия от позиции рисования, определенной в контексте устройства воспроизведения, до указанной точки.
META_PAINTREGION Закрашивание области текущей кистью, указанной в контексте устройства воспроизведения.
META_PATBLT Нарисуйте область текущей кистью, указанной в контексте устройства воспроизведения, а затем объедините цвет кисти и цвет (а) поверхности с помощью растровой операции .
META_PIE Нарисуйте клин в форме пирога, ограниченный пересечением эллипса и двух радиалов — линия устанавливается через перо устанавливается через контекст устройства воспроизведения, а область, ограниченная круговой формой, заполняется текущей кистью контекста устройства воспроизведения.
META_POLYLINE Рисует серию сегментов линии, соединяя точки в указанный массив.
META_POLYGON Закрашивает многоугольник , состоящий из двух или более вершин , соединенных прямыми линиями. Многоугольник обводится пером и заполняется с помощью кисти и режима заливки многоугольника, которые определены в контексте устройства воспроизведения.
META_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 Перемещает исходную точку окна вывода в контексте устройства воспроизведения по заданной горизонтали и вертикали l смещения.
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 Определяет источник окна вывода в контексте устройства воспроизведения.
Читайте также:  Системные звуки mac для windows

Escape-записи

Escape-записи — это средство расширения функциональности метафайла с помощью записей, которые иначе не определены как тип записи WMF. Каждая 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 Используется для e mbed метафайл EMF в метафайл WMF.
METAFILE_DRIVER Запрашивает драйвер принтера о его поддержке метафайлов на устройстве вывода.
NEWFRAME Уведомляет драйвер принтера, что приложение завершила запись на страницу.
NEXTBAND Уведомляет драйвер принтера о том, что приложение завершило запись в полосу.
PASSTHROUGH Передает произвольные данные драйверу принтера.
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 Уведомляет драйвер принтера о том, что начинается новое задание печати. ​​
Читайте также:  Средства windows для работы с файлами

В управляющих записях вокруг A была обнаружена серьезная уязвимость . bort escape-запись, которая хранит код процедуры прерывания внутри самой записи. Это затронуло системы 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, и вполне вероятно, что уязвимость возникла во время этой попытки.

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

. все было по-другому, когда формат был разработан. В Windows 3.1 код модели «большой» памяти по своей природе не зависит от местоположения, и Windows никогда не была исправлена, поэтому и Windows, и приложение могли просто скопировать функцию приложения в файл WMF и предположить, что она будет работать при воспроизведении одним и тем же приложением в более поздний сеанс запуска. В любом случае неясно, предполагали ли разработчики приложения, создающие метафайлы на диске с процедурами прерывания. Кроме того, как Стивен Тулуза из Microsoft указал в опровержении Microsoft утверждений Стива, ландшафт безопасности в начале 1990-х сильно отличался от сегодняшнего, и всему коду, включая тот, который хранится в файле WMF, по своей сути доверяли. 319>Питер Ферри из 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 был представлен формат расширенного формата метафайлов плюс расширения (EMF +). EMF + предоставляет способ сериализации вызовов API GDI + таким же образом, как WMF / EMF хранит вызовы GDI.

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

Реализации

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

Оцените статью