Windows Metafile
WMF (англ. Windows MetaFile) — универсальный формат векторных графических файлов для Windows-приложений. Используется для хранения коллекции графических изображений Microsoft Clip Gallery. Формат разработан Microsoft и является неотъемлемой частью Windows, так как сохраняет последовательность аппаратно-независимых функций GDI (Graphical Device Interface), непосредственно выводящих изображение в заданный контекст графического устройства (на экран, на принтер и т.п.). Очень часто WMF неявно используется для сохранения образа окна вывода программы и его последующего восстановления, а также при переносе информации через буфер обмена (clipboard). Из MS Windows запись и чтение в файл этого формата осуществляются чрезвычайно просто и быстро. Файл этого формата может быть открыт с помощью кроссплатформенных программ GIMP (с предварительной растеризацией) и Inkscape. На платформе Macintosh аналогичную роль играет формат PICT.
Windows Metafile | |
---|---|
Расширение |
.wmf, .wmz |
MIME-тип | image/x-wmf |
Разработчик | Microsoft |
Тип формата | векторная графика |
Развит в | EMF |
Сайт | docs.microsoft.com/en-us… |
Enhanced Metafile | |
---|---|
Расширение |
.emf, .emz |
MIME-тип | image/x-emf |
Разработчик | Microsoft |
Тип формата | векторная графика |
Расширен из | WMF |
Сайт | docs.microsoft.com/en-us… |
Как формат векторной графики WMF в той или иной степени поддерживается многими мощными приложениями — AutoCAD, OpenOffice.org, Adobe Illustrator, и может использоваться для обмена данными между ними.
Структура файла
Файлы 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 |
Ссылки
- [MS-WMF]: Windows Metafile Format (англ.)
- [MS-EMF]: Enhanced Metafile Format (англ.)