Какво е EMF файл?
Подобреният метафайлов формат (EMF) съхранява графични изображения независимо от устройството. Метафайловете на EMF се състоят от записи с променлива дължина в хронологичен ред, които могат да рендират съхраненото изображение след анализ на всяко изходно устройство. Тези записи с променлива дължина могат да бъдат дефиниции на затворени обекти, команди за рисуване и графични свойства, критични за точното изобразяване на изображението. Когато дадено устройство отвори EMF метафайл, използвайки собствената си графична среда, пропорциите, размерите, цветовете и другите графични свойства на оригиналното изображение остават същите, независимо от платформата на устройството за отваряне.
Кратка история
През 1990 г. Microsoft проектира файлов формат Windows метафайл (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)
EMF версии
- Оригинал: Оригиналната версия указва необходимия запис за запазване на оригиналното изображение и поддържане на неговата независимост от устройството. Освен това поддържа запис, съдържащ графични обекти и команди за рисуване.
- Версия 1: Втората версия на EMF подобри гъвкавостта и независимостта на устройството чрез добавяне на запис за пикселен формат и възможност за използване на OpenGL команда.
- Версия 2: Третата версия подобри точността чрез добавяне на метричната система за измерване на повърхностните разстояния на устройството, оставяйки записа по-мащабируем.
Подобрени метафайлови записи
Метафайловите записи са подредени под формата на масив. Тези записи имат структура ENHMETARECORD и променлива дължина. ENHMETARECORD указва данни, които дефинират GDI функции за създаване на картина с помощта на подобрен формат на метафайл. Структурата ENHMETAHEADER винаги е първият запис в този формат. Тази EMF заглавка съдържа следната информация.
Всеки запис на подобрен метафайл има два члена на EMR (осигурява основната структура) в началото. Първият член разпознава функцията GDI (параметрите се използват в записа), която определя типа на записа и е известна като iType. Другият член nSize определя размера на всеки запис. Останалите параметри (ако има такива) и допълнителни данни, подредени непосредствено под nSize. Непосредствено след заглавката може да се появи незадължително текстово описание. Името на снимката и авторът се записват в това текстово описание. Палитрата, чието присъствие е опция, определя цветовете, използвани при подобреното създаване на метафайл. Другите записи, използвани за указване на функцията GDI, която е от съществено значение при създаването на картина.
Във всеки метафайл трябва да присъства поне един EMF запис. Информацията за преминаване от един запис към друг зависи от EMF записите, така че тези записи трябва да бъдат подредени в съседство. Във всеки даден запис в метафайла, с изключение на EOF_record, дължината на този конкретен запис се определя за преминаване към следващия запис.
Подобрено създаване на метафайл
Функцията CreateEnhMetaFile се използва за създаване на подобрен метафайл. Аргументите на тази функция се използват за размери и съхранение на картина на диск/памет. Освен това тази функция изисква измерението на устройството, в което картината се е появила първо (референтно устройство) и контекста на референтното устройство (DC). Така че аргументите за обработка на този DC трябва да предоставят при извикване на функцията CreateEnhMetaFile. Синтаксисът на функцията е както следва:
HDC CreateEnhMetaFileExample(
HDC hdc,
LPCSTR lptoFilename,
const OVAL *lprc,
LPCSTR lpDesc
);
HDC: манипулатор към референтно устройство.
lptoFilename: Указател към името на файла.
lprc: Указателят към овалната структура указва размерите на картината в mm.
lpDesc: указател към низ за заглавието на картината и името на приложението, което е създало картината.
Подобрени метафайлови операции
Следват задачи, които могат да бъдат изпълнени с помощта на манипулатора на подобрен метафайл.
- Показване и редактиране на съхранената снимка.
- Създаване на подобрени метафайлови копия.
- Извличане на копие на EMF заглавка, незадължително описание и двоична версия на подобрен метафайл
- Рекапитулирайте цветовете в палитрата.
Графични обекти
При операциите по чертане и рисуване, графичните обекти могат да бъдат създадени чрез записи за създаване на обекти и могат да бъдат запазени за по-нататъшна употреба. Записът EMR_SELECTOBJECT
може да извлече тези графични обекти, използвайки контекста на устройството за възпроизвеждане. Химикалки, палитри, четки, цветови пространства, шрифтове и стокови обекти са някои типове обекти за многократна употреба.
Подреждане на байтове
Little-endian формат се използва за съхраняване на данни в метафайлови записи.
Версии
EMF файловият формат е ревизиран два пъти. Променените версии са оригинални, разширение 1 и разширение 2. Разширените версии имат разпоредба за OpenGL записи и незадължителен дескриптор за вътрешен пикселен формат. Добавено е средство за измерване в милилитри за показаните размери.