WMF / преобразование Формата файла EMF C#

В моей программе у меня есть требование, чтобы "воспроизвести" или "проанализировать" метафайлы окон (WMF и EMF). Я вырыл через MSDN и Google, и самой близкой, я приехал, является Графика. Метод EnumerateMetafile. Я могу добраться, это для работы, в том моем обратном вызове EnumerateMetafileProc называют, и я могу затем назвать PlayRecord. То, что отсутствует, то, как вытащить полезные данные из того обратного вызова.

Пример я смотрел на: http://msdn.microsoft.com/en-us/library/ms142060.aspx

Обратный вызов имеет recordType параметр, который является ПЕРЕЧИСЛЕНИЕМ. Хорошо это выглядит полезным, кроме их, кажется, не способ бросить данные в любой полезный тип.

Моя цель состоит в том, чтобы воспроизвести создание WMF/EMF, так, чтобы я мог сделать вызовы функции к специализированному графическому классу, который имеет методы как (DrawLine, DrawPoint, DrawArc). В некотором смысле я воссоздаю WMF/EMF, тянущий в совершенно другом формате (Преобразование).

Любая справка в этом чрезвычайно ценна.

5
задан FlaCracker 19 November 2009 в 13:51
поделиться

1 ответ

Graphics.EnumerateMetafile, к сожалению, очень, очень тонкий слой вокруг Win32 API. Для каждой записи в EMF вы получаете неуправляемый адрес памяти для конкретной структуры записи. Никакой документации о том, что она может содержать - но в Win32 мире тоже не так уж и много.

Так что вам нужно проконсультироваться с древними текстами!

Эта книга пришла с CD-ROM-примером кода , который включает примеры программ для использования API воспроизведения EMF.

Это оставляет вам две проблемы.

  1. Очевидно, что книга вышла из печати, так что убедитесь, что любая купленная вами бывшая в употреблении копия включает в себя рабочий CD-ROM.

  2. Пример кода на Си/Си++ и будет нетривиальной задачей объявить необходимую интероперацию для 100 или около того структур, которые используются для описания всех записей EMF.

Таким образом, другим подходом может быть объявление огромного интерфейса в .NET, который имеет метод для каждого GDI вызова, который вам нужен для перехвата, а затем использование C++/CLI для адаптации примера C++ кода так, чтобы он вызывал ваш огромный интерфейс для каждой записи.

Обновление

Хотя документация MSDN по воспроизведению EMF не содержит подробностей о конкретных записях EMF, Microsoft отдельно опубликовала полную спецификацию по состоянию на 2006:

MS-EMF: Enhanced Metafile Format

Также автор книги, на которую я ссылаюсь выше, предоставил исходный код примеров CDROM для скачивания:

Исходный код для Windows Graphics Programming

9
ответ дан 13 December 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: