Що таке файл EMF?
Розширений формат метафайлів (EMF) зберігає графічні зображення незалежно від пристрою. Метафайли EMF складаються із записів змінної довжини в хронологічному порядку, які можуть відтворити збережене зображення після аналізу на будь-якому пристрої виводу. Ці записи змінної довжини можуть бути визначеннями закритих об’єктів, командами для малювання та властивостями графіки, критичними для точного відтворення зображення. Коли пристрій відкриває метафайл EMF за допомогою власного графічного середовища, пропорції, розміри, кольори та інші графічні властивості оригінального зображення залишаються незмінними незалежно від платформи пристрою, що відкривається.
Коротка історія
У 1990 році корпорація Майкрософт розробила формат файлу зображення Windows Metafile (WMF) для Microsoft Windows. Метафайли Windows — це 16-розрядний формат, який може містити деякі растрові компоненти. WMF може складатися з векторної графіки та призначений для перенесення між різними програмами. У 1993 році Win32/GDI анонсував Enhanced Metafile (EMF), нову версію з підвищеною гнучкістю та масштабованістю. EMF також використовується як команди мови графіки для запуску драйверів принтера. Корпорація Майкрософт тепер рекомендує розширений формат метафайлу (EMF) замість формату Windows (WMF). Коли було представлено Windows XP, була випущена версія Enhanced Metafile Format Plus (EMF+). Ця новіша версія знаходить свій шлях шляхом серіалізації викликів API GDI+ так само, як WMF/EMF записує виклики до GDI. Існує версія EMF, стиснута gzip, відома як 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: Покажчик на овальну структуру вказує розміри зображення в мм.
lpDesc: вказівник на рядок для назви зображення та назви програми, яка створила зображення.
Розширені метафайлові операції
Нижче наведено завдання, які можна виконати за допомогою дескриптора розширеного метафайлу.
- Відображення та редагування збереженого зображення.
- Створення покращених копій метафайлів.
- Отримання копії заголовка EMF, додаткового опису та двійкової версії розширеного метафайлу
- Повторіть кольори в палітрі.
Графічні об’єкти
Під час малювання та малювання графічні об’єкти можна створювати за допомогою записів створення об’єктів і зберігати для подальшого використання. Запис EMR_SELECTOBJECT
може отримати ці графічні об’єкти за допомогою контексту пристрою відтворення. Ручки, палітри, пензлі, колірні простори, шрифти та запасні об’єкти є деякими типами об’єктів, які можна використовувати багаторазово.
Порядок байтів
Формат Little-endian використовується для зберігання даних у записах метафайлів.
Версії
Формат файлу EMF було двічі переглянуто. Змінені версії оригінальні, розширення 1 і розширення 2. Розширені версії мають можливість для записів OpenGL і додатковий дескриптор для внутрішнього формату пікселів. Для відображуваних розмірів додано вимірювальний засіб у мілілітрах.