Windows Metafile - Windows Metafile

Windows Metafile ( WMF ) er et bildefilformat som opprinnelig ble designet for Microsoft Windows på 1990-tallet. Det opprinnelige Windows Metafile-formatet var ikke enhetsuavhengig (men kunne gjøres mer med plasseringshoder) og kan inneholde både vektorgrafikk og bitmapkomponenter . Det fungerer på samme måte som SVG- filer. WMF-filer ble senere erstattet av Enhanced Metafiles (EMF-filer) som sørget for enhetsuavhengighet. EMF-filer ble deretter forbedret via EMF + -filer.

I hovedsak lagrer en metafil en liste over poster som består av tegningskommandoer, definisjoner av egenskaper og grafikkobjekter for å vise et bilde på skjermen. Tegningskommandoene som er brukt, er nært beslektet med kommandoene til GDI- API ( Graphics Device Interface ) som brukes til tegning i Microsoft Windows.

Det er tre hovedtyper metafiler - en WMF er et 16-biters format introdusert i Windows 3.0 . Det er det opprinnelige vektorformatet for Microsoft Office- applikasjoner som Word , PowerPoint og Publisher . Fra og med 2017 er revisjon 14 av Windows Metafile Format-spesifikasjonen tilgjengelig for online lesing eller nedlasting som PDF. EMF-filer, som erstattet WMF-filer, fungerer på samme prinsipp bare det er et 32-biters filformat som også muliggjør innebygging av private data i "kommentar" poster. EMF + er en utvidelse av EMF-filer og innebygd i disse kommentaroppføringene, og tillater bilder og tekst ved hjelp av kommandoer, objekter og egenskaper som ligner på Windows GDI + .

Historie

Det opprinnelige 16-biters WMF-filformatet ble spesifisert i volum 4 av Windows 3.1 SDK-dokumentasjonen fra 1992 (i det minste hvis kombinert med beskrivelsene av de enkelte funksjonene og strukturene i de andre volumene), men spesifikasjonen var vag om noen få detaljer. Disse håndbøkene ble publisert som trykte bøker tilgjengelig i bokhandlere uten klikk gjennom EULA eller andre uvanlige lisensbegrensninger (bare en generell advarsel om at hvis programvaren ble kjøpt som en del av en programvarepakke, vil den være underlagt en).

Over tid ble eksistensen av den historiske spesifikasjonen stort sett glemt, og noen alternative implementeringer brukte reversering for å finne ut filformatet fra eksisterende WMF-filer, noe som var vanskelig og feilutsatt. I september 2006 publiserte Microsoft igjen WMF-filformatspesifikasjonen i en mer fullstendig form i sammenheng med Microsoft Open Specification Promise , og lovet å ikke hevde patentrettigheter til filformatimplanterere.

Microsoft avskrev senere WMF-filer til fordel for 32-biters EMF-filer, da WMF-filer hadde reelle problemer med enhetsuavhengighet, til tross for bruk av en "plasserbar" filoverskrift som ga grunnleggende enhetsuavhengighet. Microsoft fant at utviklere som bruker formatet var "[innebygd] applikasjon, plassering eller skaleringskommentarer i metafilene ... Andre la til overskrifter i metafilen som ga forskjellige applikasjonsspesifikke opplysninger", og forårsaket store kompatibilitetsproblemer. I 1992 med Windows NT 3.1 introduserte Microsoft således Enhanced Metafile format (EMF) - et format som var basert på Win32 API og som de innebygde enhetsuavhengighet med. - disse var også kjent som NT-metafiler. Med utgivelsen av Windows XP og GDI + måtte settet med poster økes betydelig, og derfor ga Microsoft ut EMF + som en utvidelse av det eksisterende EMF-filformatet.

Metafile struktur

Sammenligning av Windows Metafiles - merk at WMF-filer kan inkludere EMF + -poster

WMF-, EMF- og EMF + -filer består av en rekke poster som spilles av for å gi grafisk utdata. Noen poster definerer objekter som kan spesifisere grafiske objekter som brukes til å bestemme hvordan grafikk skal tegnes (f.eks. Angir penner fargen og bredden på linjene). Hver av disse objektene lagres i metafiler og plasseres i en objekttabell, som sporer bruken av grafiske objekter mens du behandler metafilen. Objektbordet er et assosiativt utvalg av indekser til grafiske objektstrukturer definert i metafilen.

WMF- og EMF-filer håndterer objektbehandling på en annen måte enn EMF + -poster i EMF-filer. Når en WMF- og EMF-fil behandles, blir postene lest inn i en objekttabell når et objekt er definert. Hvis et objekt slettes, frigjøres objektet fra tabellen, og identifikatoren kan brukes på nytt. Spesielt vil et objekt ikke brukes før det er valgt spesielt under avspilling av plater. Dette er forskjellig for EMF + -filer, som også bruker en assosiativ matrise via en hashmap som registrerer objektet sammen med en objektidentifikator. Imidlertid, i motsetning til WMF- og EMF-filer som kan slette et objekt, når et nytt objekt opprettes med samme indeks som et eksisterende objekt, blir oppføringen i tabellen erstattet med det nye objektet. En EMF-fil trenger heller ikke å velge et objekt spesifikt før det brukes.

WMF

Strukturer av originale og plasserbare Windows-metafiler

WMF-filer ble ikke opprinnelig designet for å være enhetsuavhengige, noe som betyr at du ikke kunne spille av filen på utdataenheter som avviker fra den opprinnelige enheten som filen ble spilt inn på. En delvis løsning på dette problemet ble oppfunnet av Aldus Corporation , som la til en ekstra "plasserbar" header, kalt "APM-header", som la til en avgrensningsrettbar, en metafilversjon, metafilestørrelse, antall objekter i metafilen og størrelsen av den største enkeltplaten i metafilen. Dette ble senere innlemmet i WMF-formatet av Microsoft, fra og med Windows 2000.

WMF-filer er strukturert av en serie poster, startende med et antall kontrollposter: toppteksten, den nevnte valgfrie plasserbare posten, og avsluttes med en slutt på filopptaket.

Innkapslet av kontrollpostene er postene som utgjør selve bildet. Disse postene fungerer innenfor det som kalles avspillingsenhetskonteksten , som er samlingen av egenskaper og objekter som utgjør enhetens grafiske miljø når metafilen "spilles" av på denne utdataenheten.

Andre poster enn kontrollposter kan i stor grad grupperes i bitmapposter, tegningsposter, objektposter, tilstandsposter og rømningsposter.

Bitmap poster

Bitmap-poster administrerer og sender ut bitmap-bilder .

Navn Beskrivelse
META_BITBLT Spesifiserer hvordan du gjør litt blokkoverføring . Disse postene kan spesifisere en bitmap som skal brukes som kilde eller som en region.
META_DIBBITBLT Spesifiserer hvordan du gjør litt blokkering av et enhetsuavhengig bitmapbilde . Disse postene kan spesifisere et bitmappe som skal brukes som kilde eller som en region.
META_DIBSTRETCHBITBLT Spesifiserer hvordan du gjør litt overføring av et enhetsuavhengig bitmapbilde, men tillater utvidelse eller sammentrekning av bildet. Disse postene kan spesifisere et bitmappe som skal brukes som kilde eller som en region.
META_SETDIBTODEV Spesifiserer farge for å angi en blokk med piksler i et enhetsuavhengig bitmapbilde. Disse postene kan spesifisere en bitmap som skal brukes som kilde eller som en region.
META_STRETCHBLT Spesifiserer hvordan du gjør litt overføring av blokkering, men tillater utvidelse eller sammentrekning av bildet.
META_STRETCHDIB Spesifiserer hvordan du gjør litt overføring av et enhetsuavhengig bitmapbilde, men tillater utvidelse eller sammentrekning av bildet. Disse postene kan spesifisere et bitmappe som skal brukes som kilde eller som en region.

Tegne poster

Tegningsposter produserer grafikkoutput.

Navn Beskrivelse
META_ARC Tegner en elliptisk lysbue .
META_CHORD Tegner et akkord .
META_ELLIPSE Tegner en elliptisk lysbue .
META_EXTFLOODFILL Fyller et område med en børste.
META_EXTTEXTOUT Tegn tekst med skrift, bakgrunnsfarge og tekstfarge i avspillingsenhetens sammenheng.
META_FILLREGION Fyller en region med en spesifisert børste.
META_FLOODFILL Fyller et område med en børste.
META_FRAMEREGION Tegner en kant rundt en region på siden med en pensel.
META_INVERTREGION Maler en region av grafikken med inverterte farger.
META_LINETO Tegner en halv åpen linje fra tegningsposisjonen som er definert i avspillingsenhetens kontekst til et spesifisert punkt.
META_PAINTREGION Mal et område med gjeldende pensel spesifisert i avspillingsenhetens sammenheng.
META_PATBLT Mal et område med gjeldende pensel spesifisert i avspillingsenhetens sammenheng, og kombiner deretter penselfarge og overflatefarge (r) ved hjelp av en rasteroperasjon .
META_PIE Tegn en kakeformet kil begrenset av skjæringspunktet mellom en ellips og to radialer - linjen blir satt via pennesettet via avspillingsenhetens kontekst, og området avgrenset av kakeformen fylles ut av gjeldende børste til avspillingsenheten kontekst.
META_POLYLINE Tegner en serie linjesegmenter ved å koble punktene i en spesifisert matrise.
META_POLYGON Maler en polygon som består av to eller flere hjørner forbundet med rette linjer. Polygonet skisseres ved hjelp av pennen og fylles ved hjelp av pensel- og polygonfyllingsmodus som er definert i avspillingsenhetens sammenheng.
META_POLYPOLYGON Maler en serie lukkede polygoner som kan overlappe hverandre. Hver polygon skisseres ved hjelp av pennen og fylles ved hjelp av pensel- og polygonfyllingsmodus som er definert i avspillingsenhetens sammenheng.
META_RECTANGLE Maler et rektangel, som er skissert ved bruk av pennen og fylt ut med penselen og fylles med penselen som er definert i avspillingsenhetens sammenheng.
META_ROUNDRECT Maler et rektangel med avrundede hjørner. Rektangelet skisseres ved hjelp av pennen og fylles ved hjelp av børsten og fylles ved hjelp av børsten som er definert i avspillingsenhetens sammenheng.
META_SETPIXEL Angir pikselet ved de angitte koordinatene til den angitte fargen.
META_TEXTOUT Skriver ut en tegnstreng på det angitte stedet ved å bruke skrift, bakgrunnsfarge og tekstfarge som er definert i avspillingsenhetens sammenheng.

Objekt poster

Objektposter oppretter og administrerer grafikkobjekter. I WMF-filer er det to brede kategorier av objekter - grafikkobjekter og strukturobjekter. Strukturobjekter blir ikke eksplisitt opprettet eller slettet i en WMF, de er i stedet for komplekse strukturer. For eksempel inneholder BitmapCoreHeader informasjon om dimensjonene og fargeformatet til en enhetsuavhengig bitmap, som i seg selv er en del av et DeviceIndependentBitmap-objekt. Et grafikkobjekt spesifiserer imidlertid parametere for grafikkutgang, og under avspilling av WMF setter den opp avspillingsenhetskonteksten.

Grafikkobjekter kan være pensler (definerer stil, farge og mønster på en pensel som definerer hvordan man skal male et område av grafikken), skrifter (definerer egenskaper som påvirker hvordan teksten vises), paletter (spesifiserer farger som enhetsuavhengige verdier, definert av et program), penner (spesifiserer de grafiske attributtene til en linje) og regioner (som spesifiserer linje- og kurvesegmenter som definerer en form).

Navn Beskrivelse
META_CREATEBRUSHINDIRECT Oppretter et penselobjekt fra et LogBrush-objekt (logisk børste).
META_CREATEFONTINDIRECT Oppretter et penselobjekt fra et fontobjekt.
META_CREATEPALETTE Oppretter et palettobjekt.
META_CREATEPATTERNBRUSH Oppretter et penselobjekt fra et LogBrush-objekt (logisk børste).
META_CREATEPENINDIRECT Lager et pennobjekt.
META_CREATEREGION Oppretter et regionobjekt.
META_DELETEOBJECT Slett et objekt.
META_CREATEBRUSHINDIRECT Oppretter et penselobjekt fra et LogBrush-objekt (logisk børste).
META_DIBCREATEPATTERNBRUSH Oppretter et penselobjekt fra en enhetsuavhengig bitmap.
META_SELECTCLIPREGION Spesifiserer regionobjektet som vil være den nåværende utklippsregionen .
META_SELECTOBJECT Velger objektet som vil være det gjeldende objektet for avspillingsenhetens kontekst, som fungerer på alle grafikkobjekter unntatt palettobjekter, som må angis med META_SELECTPALETTE.
META_SELECTPLAETTE Velger den logiske paletten for avspillingsenhetens kontekst.

Statlige poster

Statlige poster administrerer grafikkegenskapene til avspillingsenhetens sammenheng.

Navn Beskrivelse
META_ANIMATEPALETTE Definerer oppføringer i den logiske paletten på nytt som er definert i avspillingsenhetens sammenheng med et spesifisert palettobjekt.
META_EXCLUDECLIPRECT Angir klippeområdet som er definert i avspillingsenhetens sammenheng til det eksisterende klippeområdet minus et spesifisert rektangel.
META_INTERSECTCLIPRECT Angir klippeområdet som er definert i avspillingsenhetens sammenheng til skjæringspunktet mellom det eksisterende klippeområdet og et spesifisert rektangel.
META_MOVETO Stiller utgangsposisjonen i avspillingsenhetens kontekst til et spesifisert punkt.
META_OFFSETCLIPRGN Flytter utklippsregionen som er definert i avspillingsenhetens sammenheng med angitte forskyvninger.
META_OFFSETVIEWPORTORG Flytter visningsopprinnelsen i avspillingsenhetens sammenheng med angitte horisontale og vertikale forskyvninger.
META_OFFSETWINDOWORG Flytter utgangsvinduets opprinnelse i avspillingsenhetens sammenheng med angitte horisontale og vertikale forskyvninger.
META_REALIZEPALETTE Kartlegger oppføringer fra den logiske paletten som er definert i avspillingsenhetens sammenheng til systempaletten.
META_RESIZEPALETTE Definerer størrelsen på den logiske paletten som er definert i avspillingsenhetskonteksten.
META_RESTOREDC Gjenoppretter avspillingskontekst fra en tidligere lagret enhetskontekst.
META_SAVEDC Lagrer avspillingsenhetens kontekst for senere henting.
META_SCALEVIEWPORTEXT Skalerer de horisontale og vertikale delene av visningsporten som er definert i avspillingsenhetens kontekst ved hjelp av forholdstallene som er dannet av spesifiserte multiplikaler og delere.
META_SCALEWINDOWEXT Skaler de horisontale og vertikale delene av utgangsvinduet som er definert i avspillingsenhetens kontekst ved hjelp av forholdstallene dannet av spesifiserte multiplikaler og divisorer.
META_SETBKCOLOR Angir bakgrunnsfargen i avspillingsenhetens kontekst til en spesifisert farge.
META_SETBKMODE Stiller inn bakgrunnsblandingsmodus i avspillingskontekst.
META_SETLAYOUT Definerer layoutretningen i avspillingsenhetens kontekst.
META_SETMAPMODE Definerer kartleggingsmodus i avspillingskontekst.
META_SETMAPPERFLAGS Definerer algoritmen som font mapper bruker når den tilordner logiske skrifter til fysiske skrifter.
META_SETPALENTRIES Definerer RGB-fargeværdier i en rekke oppføringer i den logiske paletten som er definert i avspillingsenhetens sammenheng.
META_SETPOLYFILLMODE Definerer polygonfyllingsmodus i avspillingsenhetens kontekst for grafikkoperasjoner som fyller polygoner.
META_SETRELABS Ubrukt plate.
META_SETROP2 Definerer rasteroperasjonens blandingsmodus i avspillingsenhetens sammenheng.
META_SETSTRETCHBLTMODE Definerer bitmap-strekkingsmodus i avspillingsenhetens sammenheng.
META_SETTEXTALIGN Definerer verdier for tekstjustering i avspillingsenhetens sammenheng.
META_SETTEXTCHAREXTRA Definerer mellomrom mellom tegn for tekstjustering i avspillingsenhetens sammenheng.
META_SETTEXTCOLOR Definerer tekst forgrunnsfarge i avspillingsenhetens sammenheng.
META_SETTEXTJUSTIFICATION Definerer hvor mye plass som skal legges til for å bryte tegn i en streng med berettiget tekst.
META_SETVIEWPORTEXT Definerer de horisontale og vertikale delene av visningsområdet i avspillingsenhetens sammenheng.
META_SETVIEWPORTORG Definerer visningsopprinnelsen i avspillingsenhetens sammenheng.
META_SETWINDOWEXT Definerer de horisontale og vertikale delene av utgangsvinduet i avspillingsenhetens sammenheng.
META_SETWINDOWORG Definerer utgangsvinduets opprinnelse i avspillingsenhetens sammenheng.

Escape-poster

WMF generisk fluktrekord

Escape-poster er et middel for å utvide metafile-funksjonalitet via poster som ellers ikke er definert som en WMF-posttype. Hver rømningspost inneholder en postfunksjon, en rømningsfunksjon og potensielt rømningsdata.

Følgende fluktposter utgjør en WMF-fil.

Navn Beskrivelse
ABORTDOC Stopper behandlingen av det gjeldende dokumentet.
BEGIN_PATH Åpner en sti.
CHECK_JPEGFORMAT Bestemmer om den kan håndtere det gitte JPEG- bildet.
CHECK_PNGFORMAT Bestemmer om den kan håndtere det gitte PNG- bildet.
CLIP_TO_PATH Bruker en funksjon på den nåværende PostScript- klippestien.
CLOSE_CHANNEL Samme som ENDDOC.
LAST NED_FACE Angir navnet på skriftens ansiktsnavn på utdataenheten.
LAST NED_HEADER Last ned sett med PostScript-prosedyrer.
DRAW_PATTERNRECT Tegner et rektangel med et definert mønster.
ENCAPSULATED_POSTSCRIPT Sender vilkårlig innkapslet PostScript (EPS) data direkte til skriverdriveren.
END_PATH Avslutter en sti.
ENDDOC Varsler skriverdriveren om at en ny utskriftsjobb avsluttes.
EPS_PRINTING Indikerer start og slutt på EPS-utskrift.
EXTTEXTOUT Tegner tekst med den valgte fonten, bakgrunnsfargen og tekstfargen.
GET_COLORTABLE Henter fargetabellverdier fra skriverdriveren.
GET_DEVICEUNITS Får enhetene som for øyeblikket er konfigurert på utdataenheten.
GET_EXTENDED_TEXTMETRICS Henter de utvidede tekstberegningene som for øyeblikket er konfigurert i skriverdriveren.
GET_FACENAME Får navnet på skrifttypen som for øyeblikket er konfigurert på utdataenheten.
GET_PAIRKERNTABLE Får fontkjernetabellen som for øyeblikket er definert på utdataenheten.
GET_PHYSPAGESIZE Henter den fysiske sidestørrelsen som er valgt på utdataenheten.
GET_PRINTINGOFFSET Henter forskyvningen fra øvre venstre hjørne av den fysiske siden der den faktiske utskriften eller tegningen begynner.
GET_PS_FEATURESETTING Spør skriverdriveren for informasjon om PostScript-funksjoner som støttes på utdataenheten.
GET_SCALINGFACTOR Henter skaleringsfaktorene for x-aksen og y-aksen til en skriver.
META_ESCAPE_ENHANCED_METAFILE Brukes til å bygge inn en EMF-metafil i en WMF-metafil.
METAFILE_DRIVER Spør skriverdriveren om støtten til metafiler på utdataenheten.
NEWFRAME Varsler skriverdriveren at applikasjonen er ferdig med å skrive til en side.
NESTEBAND Varsler skriverdriveren om at applikasjonen er ferdig med å skrive til et bånd.
GÅ IGJENNOM Passerer vilkårlige data til skriverdriveren.
POSTSCRIPT_DATA Sender vilkårlige PostScript-data til utdataenheten.
POSTSCRIPT_IDENTIFY Stiller skriverdriveren til enten PostScript-sentrisk eller GDI-sentrisk modus.
POSTSCRIPT_IGNORE Varsler utdataenheten om å ignorere PostScript-data.
POSTSCRIPT_INJECTION Setter inn en blokk med rådata i en PostScript-strøm.
POSTSCRIPT_PASSTHROUGH Sender vilkårlige data direkte til en skriverdriver, som forventes å behandle disse dataene bare i PostScript-modus.
OPEN_CHANNEL Fungerer det samme som STARTDOC, med et NULL-dokument og utdatafilnavn og data i råmodus.
QUERY_DIBSUPPORT Spør skriverdriveren om støtten for DIB på utdataenheten.
QUERY_ESCSUPPORT Spør skriverdriveren for å finne ut om en bestemt WMF-rømningsfunksjon støttes på utdataenheten.
SET_COLORTABLE Angir verdier for fargetabell.
SET_COPYCOUNT Angir antall eksemplarer.
SET_LINECAP Spesifiserer linjeavslutningsmodus som skal brukes til å tegne til utdataenheten.
SET_LINEJOIN Spesifiserer linjeforbindelsesmodusen som skal brukes til å tegne til utdataenheten.
SET_MITERLIMIT Angir grensen for lengden på gjæringsforbindelsen som skal brukes til å tegne til utdataenheten.
SPCLPASSTHROUGH2 Gjør det mulig for dokumenter å inkludere private prosedyrer og andre vilkårlige data i dokumenter.
STARTDOC Varsler skriverdriveren om at en ny utskriftsjobb starter.

Det var en stor sårbarhet funnet i fluktposter rundt Abort escape-posten, som lagrer koden for avbruddsprosedyre i selve posten. Dette påvirket Windows-systemer (se CVE - 2005-4560 ) og Wine-prosjektet (se CVE - 2006-0106 ). Ifølge Secunia , "Sårbarheten er forårsaket av en feil i håndteringen av Windows Metafile-filer ('.wmf') som inneholder spesiallagde SETABORTPROC 'Escape' poster. Slike poster tillater at vilkårlig brukerdefinert funksjon kan utføres når gjengivelsen av en WMF-fil mislykkes. " I følge Windows 3.1 SDK-dokumentasjonen var SETABORTPROC-flukten foreldet og erstattet av funksjonen med samme navn i Windows 3.1, lenge før WMF-sårbarheten ble oppdaget. Den foreldede rømningskoden ble imidlertid beholdt for kompatibilitet med 16-biters programmer skrevet for (eller i det minste bakoverkompatible med) Windows 3.0. Denne endringen skjedde omtrent samtidig som Microsoft opprettet 32-biters reimplementering av GDI for Windows NT, og det er sannsynlig at sårbarheten oppstod under dette arbeidet.

Etter at Steve Gibson beskyldte Microsoft for bevisst å ha implementert en bakdør i koden, ga Mark Russinovich en tilbakevisning og uttalte at:

... ting var annerledes da formatet ble arkitektert. I Windows 3.1 er "stort" minnemodellkode iboende plasseringsuavhengig og Windows ble aldri lappet, så både Windows og et program kunne ganske enkelt kopiere en applikasjonsfunksjon til WMF-filen og anta at den ville fungere når den ble spilt av det samme programmet i en senere løpetur. I alle fall er det ikke klart at utviklerne så for seg applikasjoner som oppretter metafiler på disk med avbruddsprosedyrer. Som Microsofts Stephen Toulouse påpekte i Microsofts tilbakevisning av Steves påstander, var sikkerhetslandskapet tidlig på 1990-tallet veldig annerledes enn i dag, og all kode, inkludert den som var lagret i en WMF-fil, var iboende klarert.

Peter Ferrie fra Symantec Security Response, USA, var også uenig med Gibson og bemerket at:

Gibson hevdet at en tråd er opprettet for å kjøre SetAbortProc-behandleren. Det opprettes faktisk ingen tråder for å kjøre behandleren - det er en tilbakeringing, som kalles av parseren, og parseren må vente til tilbakeringingen returnerer, ellers går hele poenget med funksjonen (for å avbryte utskriften) tapt . Etter eget innrømmelse leste ikke Gibson dokumentasjonen (faktisk hevdet han at han ikke kunne finne den, selv om den er fritt tilgjengelig på Microsofts nettsted), og han hevdet at enhetskonteksten ikke er tilgjengelig for funksjonsbehandleren. . Enhetskonteksten er selvfølgelig tilgjengelig for funksjonsbehandleren - det er en av de to parametrene som sendes til den (se ovenfor), og det er nødvendig for å avbryte utskriften. Til slutt hevdet Gibson at kontrollflyten ikke kunne gå tilbake til Windows. Det handler ganske enkelt om at funksjonen returnerer og forkaster parametrene som ble sendt på bunken. Hvis posten er godt utformet, vil Windows fortsette å analysere filen, som før. ... Gibson innrømmer at han gjettet om en rekke ting. Dessverre gjettet han dårlig. Jeg vet vel at vi vet bedre nå.

EMF

Windows Enhanced Metafile headers

EMF-filer har tre mulige versjoner av overskrifter. De originale topptekstene er bare en beholder for bilder, den andre og tredje versjonen innkapsler den originale overskriften og inneholder et pikselformatopptak og støtte for OpenGL-poster, og den tredje versjonen innkapsler den andre topptekstforlengelsen og øker EMF-nøyaktighet og skalerbarhet av EMF-er som den legger til muligheten til å måle avstander på enhetsflater ved hjelp av det metriske systemet.

Hver EMF-topptekst starter med en EMR_HEADER-post, og registrerer de relevante egenskapene til enheten som metafilbildet ble spilt inn på. Den originale EMF-toppteksten har en 80 byte-topptekst og en valgfri beskrivelsesstreng med variabel lengde. Andre metafiler inneholder utvidelsesfelt som innkapsler den originale overskriften. EmfMetafileHeaderExtension1er en post som settes inn rett etter den originale EMF-overskriften, spesifiserer om det er en pikselformatbeskrivelse og forskyvningen til deskriptorobjektet i overskriften, samt et felt som spesifiserer om OpenGL- poster eksisterer i metafilen. Pikselformatbeskrivelsen spesifiserer funksjonene til tegningsflaten og om en piksel er kodet i RGBA eller er en indeks i en fargetabell. EmfMetafileHeaderExtension2er en post som settes inn rett etter EmfMetafileHeaderExtension1posten, og den inneholder to felt med X- og Y-verdiene for å måle enhetens overflate i mikrometer.

I likhet med WMF-filer kan poster klassifiseres etter funksjon, men det er flere posttyper i EMF-filer enn det er i WMF-filer. Postene kan klassifiseres som kontroll, bitmap, utklipp, kommentar, tegning, rømning, oppretting av objekter, objektmanipulering, OpenGL, banebrakett, tilstand og transformasjonsposter.

EMF +

Med utgivelsen av Windows XP ble formatet Enhanced Metafile Format Plus Extensions (EMF +) introdusert. EMF + gir en måte å serieisere samtaler til GDI + API på samme måte som WMF / EMF lagrer samtaler til GDI.

Det er også komprimerte versjoner av Windows Metafiles, kjent som Compressed Windows Metafile (WMZ) og Compressed Windows Enhanced Metafile (EMZ), som i utgangspunktet er gzip- komprimerte WMF- og EMF-filer tilsvarende.

Implementeringer

WMF-formatet ble designet for å bli utført av Windows GDI-laget for å gjenopprette bildet , men ettersom WMF-binære filer inneholder definisjonen av GDI-grafiske primitiver som utgjør dette bildet, er det mulig å designe alternative biblioteker som gjør WMF binære filer eller konvertere dem til andre grafiske formater.

Se også

Referanser

Eksterne linker