Manipularea Windows Metafișiere

Windows formatul Metafile este un format de fișier imagine care poate conține atât grafică vectorială, cât și grafică raster. Acest format este utilizat pentru a stoca date grafice în memorie sau fișiere pe disc. Un metafișier stochează o listă de apeluri de funcții în interfața dispozitivului Grafic Windows (GDI) care trebuie executate pentru a afișa imaginea pe ecran. Sistemul interpretează și execută aceste comenzi în contextul afișajului.

Anterior, Windows Metafile era singurul format de imagine vectorială suportat de Microsoft Word. Microsoft Word Acum acceptă și formatul SVG, dar formatul metafișier este încă utilizat în mod obișnuit în documentele Word. De asemenea, Metafile ar putea fi un format de schimb pentru alte aplicații, cum ar fi Microsoft Visio. În esență, scopul principal al Metafile este de a asigura schimbul de informații grafice între aplicațiile Windows.

Există 3 versiuni ale Windows metafișier:

  • WMF - magazinele apelează la 16 biți GDI.
  • EMF - magazinele apelează la Win32 / GDI.
  • EMF + Metafișiere magazine apel la GDI+. EMF+ Metafișierul poate fi, de asemenea, dual, descriind aceleași grafice cu ambele părți EMF și EMF+.

Problema existentă cu Windows Metafile este că nu este acceptată de majoritatea formatelor non-Word, la care documentele sunt de obicei salvate. Prin urmare, este necesar să convertiți formatul Metafile în alte formate raster sau vectoriale. Este ușor să convertiți Windows metafișier în imagine raster pe .NET prin simpla trecere la GDI+, dar nu este posibil pe alte platforme, deoarece chiar și GDI+ nu oferă funcționalitatea de a extrage grafica vectorială din metafișier. Pentru a rezolva aceste probleme, Aspose.Words implementează propriul Windows Metafile player, care este capabil să redea formatul Metafile atât grafică vectorială, cât și grafică raster pe toate platformele.

Controlul playerului metafișier Aspose.Words

Clasa MetafileRenderingOptions vă permite să controlați playerul metafile. De exemplu, puteți determina modul în care imaginile metafișiere ar trebui redate folosind proprietatea rendering_mode, care are o semnificație specială la conversia în bitmap-uri (a se vedea și proprietatea ImageSaveOptions.metafile_rendering_options).

Salvarea pe un bitmap funcționează diferit pe alte platforme decât .NET. În timp ce redarea .NET GDI+ este o referință care funcționează aproape perfect chiar și pentru cel mai complex format metafișier, pe alte platforme poate cauza probleme sau nu poate fi acceptată deloc.

Sprijinirea Operațiunilor Raster

Raster operations este o caracteristică metafile complexă, care are în prezent suport limitat. Operațiile Raster sunt disponibile în formate metafișiere WMF și EMF. Formatul EMF+ metafile nu utilizează operațiuni raster direct, dar poate conține EMF părți, încorporate WMF sau EMF Metafile.

Există operații raster binare și ternare:

  • Operațiile raster binare sunt aplicate comenzilor de desenare a stiloului, cum ar fi desenarea liniilor și curbelor. La trasarea unei linii, culoarea stiloului este combinată cu culoarea bitmap-ului de destinație (culoarea pixelului corespunzător de pe suprafața dispozitivului) prin utilizarea operațiilor logice bitwise specificate cu valori de culoare hexagonale. Exemplul de imagine de mai jos ilustrează efectul tuturor operațiilor raster binare 16 aplicate la 20 bare de culori diferite. Barele verticale de culoare sunt desenate mai întâi, barele orizontale sunt desenate după aplicarea fiecărei operații raster binare. Pentru cazurile simple, R2_BLACK desenează negru, R2_NOT inversează culoarea, R2_NOP nu schimbă fundalul și R2_WHITE desenează alb.
handling-windows-metafiles-aspose-words-net-1
  • Operațiile raster ternare sunt aplicate la desenarea imaginilor bitmap. Acestea combină culorile pixelilor de imagine bitmap corespunzători, pensula și bitmap-ul de destinație utilizând operații logice pe biți cu valori de culoare hexagonale specificate. Unul dintre cele mai comune scopuri ale utilizării operațiilor raster ternare este emularea transparenței. Imaginea furnizată în exemplul de mai jos demonstrează modul în care transparența pictogramelor poate fi emulată. Există două tipuri de bitmap-uri: b/w mask bitmap și color bitmap. În primul rând, bitmap-ul de mască este desenat cu operația raster SRCAND. Schimbă Regiunea pictogramei opace în alb-negru, lăsând regiunea transparentă neschimbată. Apoi a doua hartă de biți este desenată cu operația raster SRCINVERT. Afișează pixelii de culoare pe regiunea neagră, lăsând regiunea transparentă neschimbată.
handling-windows-metafiles-aspose-words-net-2

Operațiile Raster nu pot fi convertite direct în grafică vectorială. Aspose.Words emulează operațiile raster prin rasterizarea parțială a suprafeței dispozitivului afectată de operațiile raster. În acest scop, se utilizează proprietatea emulate_raster_operations.

Exemplul prezentat mai jos demonstrează modul în care Aspose.Words redă un metafișier într-o hartă de biți atunci când nu este posibil să redați corect unele dintre înregistrările metafișierului în grafică vectorială:

# Load the document from disk.
doc = aw.Document(docs_base.my_dir +  "Rendering.docx")

metafileRenderingOptions = aw.saving.MetafileRenderingOptions()
metafileRenderingOptions.emulate_raster_operations = False
metafileRenderingOptions.rendering_mode = aw.saving.MetafileRenderingMode.VECTOR_WITH_FALLBACK

saveOptions = aw.saving.PdfSaveOptions()
saveOptions.metafile_rendering_options = metafileRenderingOptions

doc.save(docs_base.artifacts_dir +"PdfSaveOptions.HandleRasterWarnings.pdf", saveOptions)

Setări De Rezervă Metafile

Aspose.Words nu acceptă o serie de caracteristici metafile care sunt cele mai complexe sau rare. În acest caz, Aspose.Words poate efectua o rezervă la un alt tip de jucător metafișier.

În primul rând, Aspose.Words efectuează o rezervă de la playerul metafișier vector la raster, care este controlat de proprietatea rendering_mode. Dacă caracteristica de rezervă este dezactivată, Aspose.Words încearcă să redea unele grafice de substituție în loc de caracteristicile care nu sunt acceptate.

Aspose.Words redă cu succes metafile în raster folosind GDI + pe .NET, ceea ce face ca această opțiune de apel invers să fie sigură.

În al doilea rând, există o opțiune pentru EMF+ metafișier Dual să se retragă de la redarea părții EMF+ la Partea EMF. Este controlat de emf_plus_dual_rendering_mode. Dacă apar unele probleme la redarea părții EMF, atunci poate fi efectuată și o rezervă la raster.

În ceea ce privește operațiile raster, dacă emulate_raster_operations este dezactivat, atunci operațiile raster sunt considerate ca neacceptate, ceea ce declanșează revenirea la bitmap metafile player dacă este activat. Prin urmare, dacă aveți un metafișier cu operații raster, dar nu doriți să utilizați emularea operațiilor raster și totuși doriți să obțineți ieșirea vectorială cu grafică de substituție, atunci selectați MetafileRenderingMode.VECTOR.