Работа Windows Метафили
Windows Метаилният формат е файлов формат на изображението, който може да съдържа както векторни, така и растерни графики. Този формат се използва за съхраняване на графични данни в паметта или на дискови файлове. Метафил съхранява списък с функционални повиквания в графичния интерфейс на устройството Windows (GDI), който трябва да бъде изпълнен, за да се покаже изображението на екрана. Системата интерпретира и изпълнява тези команди в контекста на дисплея.
В миналото Windows Метафилът беше единственият формат на векторно изображение, поддържан от Microsoft Word. Microsoft Word сега също поддържа SVG формат, но метафилният формат все още се използва често в Word документи. Също така, метафайл може да бъде обменен формат за някои други приложения, като Microsoft Визио. Основната цел на Метафила е да осигури обмена на графична информация между Windows приложения.
Има 3 версии на Windows метафайл:
- WMF - магазините се обаждат на 16бит GDI.
- EMF - магазините се обаждат, за да спечелят 32 / GDI.
- EMF + метафайл магазини се обаждат на GDI+. EMF + Метафил може да бъде и двоен, описващ едни и същи графики с EMF и EMF+ части.
Съществуващият проблем с Windows Мета файл е, че той не се поддържа от повечето формати, които не саWord, в които обикновено се записват документи. Поради това е необходимо да конвертирате Метафилен формат в други растерни или векторни формати. Лесно е да конвертирате Windows метафайл в растерно изображение на .NET, като просто го предадете на GDI+, но това не е възможно на други платформи, тъй като дори GDI+ не осигурява функционалността за извличане на векторните графики от Метафил. За да реши тези проблеми, Aspose.Words имплементира собствен Windows мета файлов плейър, който е в състояние да възпроизвежда Мета файлов формат както векторна, така и растерна графика на всички платформи.
Контрол на Aspose.Words Метаили плейър
Клас MetafileRenderingOptions ви позволява да контролирате метаили плейъра. Например, можете да определите как да се рендират метафилните изображения, като използвате свойството RenderingMode, което има специално значение при конвертиране в битмапи (вижте също свойството MetafileRenderingOptions).
Записването в растерна графика работи по различен начин на платформи, различни от .NET. Докато .NET GDI + рендирането е референция, която работи почти перфектно дори и за най-сложния метафайл формат, на други платформи може да причини проблеми или изобщо да не се поддържа.
Поддръжка На Растерни Операции
Растерните операции са сложна метафилна функция, която в момента има ограничена поддръжка. Растерните операции са налични в WMF и EMF мета файлови формати. EMF + метафилният формат не използва директно растерни операции, но може да съдържа EMF части, вградени WMF или EMF метафили.
Има бинарни и тройни растерни операции:
- Бинарните растерни операции се прилагат към команди за чертане на перо, като например чертане на линии и криви. При изчертаване на линия, цветът на писалката се комбинира с цвета на крайната растерна графика (цвета на съответния пиксел на повърхността на устройството), като се използват определени побитови логически операции с шестнадесетични цветови стойности. Примерът на изображението по-долу илюстрира ефекта от всички 16 двоични растерни операции, приложени към 20 различни цветни ленти. Вертикалните цветни ленти се изчертават първо, хоризонталните ленти се изчертават след всяка операция с двоичен растер. За простите случаи R2_BLACK рисува черно, R2_NOT обръща цвета, R2_NOP не променя фона, а R2_WHITE рисува бяло.
- Тройни растерни операции се прилагат при рисуване на растерни изображения. Те комбинират цветовете на съответните пиксели на изображението с растерна графика, четката и крайната растерна графика, като използват побитови логически операции с определени шестнадесетични цветови стойности. Една от най-често срещаните цели на използването на тройни растерни операции е емулацията на прозрачност. Изображението, предоставено в примера по-долу, показва как може да се подражава на прозрачността на иконите. Има два вида битмапи: Битмап и Битмап. Първо, растерната карта на маската се изчертава с операцията SRCAND. Той променя непрозрачната икона на черно и бяло, оставяйки прозрачната област непроменена. След това втората растерна графика се изчертава с операция SRCINVERT. Той показва цветните пиксели на черната област, оставяйки прозрачната област непроменена.
Растерните операции не могат да бъдат преобразувани директно във векторни графики. Aspose.Words емулира растерни операции чрез частично растеризиране на повърхността на устройството, засегната от растерни операции. За тази цел се използва EmulateRasterOperations собственост.
Примерът, показан по-долу, показва как Aspose.Words рендира метафил в растерна графика, когато не е възможно правилно да се рендират някои от метафилните записи във векторни графики.:
Настройки На Резервния Файл
Aspose.Words не поддържа редица метафилни функции, които са най-сложни или редки. Потребителите могат да внедрят интерфейса IWarningCallBack и да получават предупредителни съобщения. Ако Aspose.Words срещне неподдържани функции в метафил, той издава предупредително съобщение с WarningSource.Metafile. В този случай Aspose.Words може да извърши резервен вариант към друг тип метаили плейър. Предупредителното съобщение относно резервния вариант също е издадено.
Първо, Aspose.Words изпълнява резервен вариант от векторния метафилен играч към растера, който се контролира от свойството RenderingMode. Ако резервната функция е забранена, Aspose.Words се опитва да направи някои графики за заместване вместо функциите, които не се поддържат.
Aspose.Words успешно възпроизвежда метафил до растер, използвайки GDI + на .NET, което прави тази опция за обратно повикване безопасна.
На второ място, има опция за EMF+ Двоен метафил, за да се отдръпне от играенето на EMF+ част до EMF част. Тя се контролира от EmfPlusDualRenderingMode. Ако възникнат някои проблеми при възпроизвеждане на частта EMF, тогава може да се извърши и резервен вариант на растер.
Що се отнася до растерните операции, ако EmulateRasterOperations е деактивиран, тогава растерните операции се считат за неподдържани, което задейства резервен план на растерния метафилен плейър, ако е активиран. Следователно, ако имате мета файл с растерни операции, но не искате да използвате емулация на растерни операции и все пак искате да получите изхода на вектора със заместващи графики, Изберете MetafileRenderingMode.Vector.