Обработка метафайлов Windows
Windows Формат метафайла - это формат графического файла, который может содержать как векторную, так и растровую графику. Этот формат используется для хранения графических данных в памяти или на диске. Метафайл хранит список вызовов функций в интерфейсе графического устройства Windows (GDI), которые должны быть выполнены для отображения изображения на экране. Система интерпретирует и выполняет эти команды в контексте отображения.
Ранее метафайл Windows был единственным форматом векторных изображений, поддерживаемым Microsoft Word. Microsoft Word теперь также поддерживается формат SVG, но формат метафайла по-прежнему широко используется в документах Word. Кроме того, метафайл может быть форматом обмена для некоторых других приложений, таких как Microsoft Visio. По сути, основная цель метафайла - обеспечить обмен графической информацией между Windows приложениями.
Существует 3 версии метафайла Windows:
- WMF – сохраняет значение вызова до 16 бит GDI.
- EMF – сохраняет вызов в Win32/GDI.
- EMF+ Метафайл хранит вызов GDI+. EMF+ Метафайл также может быть двойным, описывая одну и ту же графику как с EMF, так и с EMF+ частями.
Существующая проблема с метафайлом Windows заключается в том, что он не поддерживается большинством форматов, отличных от Word, в которые обычно сохраняются документы. Поэтому требуется преобразовать формат метафайла в другие растровые или векторные форматы. Легко преобразовать метафайл Windows в растровое изображение на .NET, просто передав его в GDI+, но на других платформах это невозможно, поскольку даже GDI+ не предоставляет функциональности для извлечения векторной графики из метафайла. Чтобы решить эти проблемы, Aspose.Words реализует свой собственный Windows проигрыватель метафайлов, который способен воспроизводить как векторную, так и растровую графику в формате метафайлов на всех платформах.
Управление проигрывателем метафайлов Aspose.Words
Класс MetafileRenderingOptions позволяет управлять проигрывателем метафайлов. Например, вы можете определить, как должны отображаться изображения из метафайлов, используя свойство RenderingMode, которое имеет особое значение при преобразовании в растровые изображения (см. также свойство MetafileRenderingOptions).
Поддержка растровых операций
Операции с растрами - это сложная функция метафайла, которая в настоящее время имеет ограниченную поддержку. Операции с растрами доступны в форматах метафайла WMF и EMF. Формат метафайла EMF+ не использует растровые операции напрямую, но может содержать части EMF, встроенные метафайлы WMF или EMF.
Существуют бинарные и троичные растровые операции:
- Бинарные растровые операции применяются к командам рисования пером, таким как рисование линий и кривых. При рисовании линии цвет пера комбинируется с цветом конечного растрового изображения (цветом соответствующего пикселя на поверхности устройства) с помощью определенных побитовых логических операций с шестнадцатеричными значениями цвета. Приведенный ниже пример изображения иллюстрирует эффект всех 16 бинарных растровых операций, примененных к 20 различным цветовым полосам. Сначала рисуются вертикальные цветные полосы, а горизонтальные полосы рисуются после применения каждой бинарной растровой операции. В простых случаях R2_BLACK рисует черным, R2_NOT изменяет цвет на противоположный, R2_NOP не изменяет фон, а R2_WHITE рисует белым.
- При рисовании растровых изображений применяются троичные растровые операции. Они объединяют цвета соответствующих пикселей растрового изображения, кисти и целевого растрового изображения с помощью побитовых логических операций с заданными шестнадцатеричными значениями цвета. Одной из наиболее распространенных целей использования троичных растровых операций является эмуляция прозрачности. Изображение, представленное в примере ниже, демонстрирует, как можно эмулировать прозрачность значка. Существует два типа растровых изображений: растровое изображение с черно-белой маской и цветное растровое изображение. Сначала растровое изображение маски рисуется с помощью растровой операции SRCAND. Непрозрачная область значка изменяется на черно-белую, а прозрачная область остается неизменной. Затем с помощью растровой операции SRCINVERT рисуется второе растровое изображение. Он отображает цветные пиксели на черной области, оставляя прозрачную область неизменной.
Растровые операции не могут быть преобразованы непосредственно в векторную графику. Aspose.Words эмулирует растровые операции путем частичного растеризации поверхности устройства, на которую воздействуют растровые операции. Для этой цели используется свойство EmulateRasterOperations.
Приведенный ниже пример демонстрирует, как Aspose.Words преобразует метафайл в растровое изображение, когда невозможно корректно преобразовать некоторые записи метафайла в векторную графику: