Windows Metafile (WMF) ist ein proprietäresMetafile-Grafikformat der Firma Microsoft. Es wurde für den Austausch von Grafiken über verschiedene Programme hinweg entwickelt und findet unter anderem in der Windows-Zwischenablage Verwendung. Werden Grafiken im WMF-Format abgespeichert, so tragen die Dateien die dreibuchstabige Dateinamenserweiterung.wmf. Bei Dateien mit der Dateinamenserweiterung .wmz handelt es sich um WMF-Dateien, die per gzip komprimiert wurden. WMF ist ein 16-bit-Format, das bereits mit Microsoft Windows 3.0 eingeführt wurde.
Dateien in diesem Format dienen meist zur Speicherung von Vektorgrafik. Das heißt, scharfe Kanten bleiben auch nach beliebiger Vergrößerung scharf. WMF speichert dafür die Abfolge von GDI-Befehlen, mit denen die gespeicherte Grafik erstellt wird. Dabei können auch Flächen mit Rastergrafik gefüllt werden.
WMF dient unter Windows als kleinster gemeinsamer Nenner beim Austausch von Vektorgrafiken zwischen unterschiedlichen Anwendungen, ohne dass sie gerastert werden müssen. Sein Nachfolger EMF erfreut sich jedoch ähnlich guter Unterstützung und bietet einige wichtige Verbesserungen.
Im Gegensatz zu anderen vektorbasierten Dateiformaten wie PostScript oder SVG verfügt WMF über keine Möglichkeit, Splines direkt darzustellen. Bei der Umwandlung wird eine als Spline definierte, geschwungene Linie daher in einen Linienzug mit kurzen, geraden Abschnitten aufgelöst. Die Länge dieser Abschnitte orientiert sich an dem, was bei einer typischen Bildschirmdarstellung gerade noch nicht als Kombination von geraden Strecken erkennbar ist.
Alle Grafiksysteme (auch PostScript) verwenden intern Linienzüge für die geschwungenen Linien von Schriften und für Kreise und Ellipsen. Bei WMF stehen die Linien aber auch in der Datei. Dies hat zur Folge, dass bei einer Kopie über die Zwischenablage und anschließender Vergrößerung die Stufen und Ecken zwischen den einzelnen Strecken-Abschnitten in Erscheinung treten, wenn die einzelnen Linien zu lang sind. Ein i-Punkt ähnelt nach einer Kopie in die Zwischenablage eventuell mehr einem Vieleck als einem Kreis. Auf diese Weise geht der potentielle Vorteil eines vektorbasierten Formats teilweise verloren.
Da Drucker eine sehr viel größere Auflösung als Bildschirme haben, erkennt man im Ausdruck selbst ohne Vergrößerung, dass geschwungene Linien aus einzelnen geraden Strecken bestehen. Dieser Effekt tritt insbesondere dann überraschend in Erscheinung, wenn das grafikerzeugende Programm z. B. ein OLE-Objekt inklusive der WMF-Vorschau mit nur für die Bildschirmdarstellung ausreichender Genauigkeit erzeugt hat.
Die Möglichkeiten von WMF würden es durchaus gestatten, auch für den Druck zufriedenstellend genaue Grafiken zu erzeugen. Insbesondere die prinzipielle Wahlfreiheit der Grafikauflösung gestattet nahezu beliebig feine Darstellungen von z. B. Linienstärken. Häufig nutzen die erzeugenden Programme aber nur eine 72-DPI-Auflösung für den Grafikaustausch über die Zwischenablage, was gerade für die Bildschirmdarstellung ausreicht.
Am 28. Dezember 2005 wurde ein Exploit entdeckt, der einen Fehler in der Verarbeitung von WMF Dateien ausnutzt. Dieser Fehler ist in sämtlichen Versionen ab Microsoft Windows 3.0 enthalten, kann aber erst ab der Version Microsoft Windows 2000 ausgenutzt werden. Mit seiner Hilfe kann beliebiger, also auch schädlicher, Code ausgeführt werden. Die Ausführung wird bereits durch das Betrachten einer präparierten WMF-Datei ausgelöst. Diese Sicherheitslücke wurde erst mit dem Auftreten der ersten sie ausnutzenden Viren öffentlich bekannt. Microsoft empfiehlt, um die Sicherheitslücke zu schließen, die am 5. Januar 2006 von Microsoft veröffentlichte Sicherheits-Aktualisierung zu installieren.
Hinweise zur WMF-Spezifikation
Obwohl es sich um ein Vektorgrafikformat handelt, verwenden WMF und EMF ganzzahlige Pixelkoordinaten (linke Abbildung).
Die kleinstmögliche Maßeinheit in WMF-Dateien ist das Twip. WMF ist ein Binärformat mit 16-Bit-Integerzahlen, deshalb ist der Wertebereich der Koordinaten auf ±32.767 beschränkt. Weil WMF-Dateien ihre Auflösung innerhalb der Spezifikationen frei wählen können, ist die maximale Kantenlänge einer feinstaufgelösten Datei z. B. 1 Twip × 65.536 = 65.536 Twip (~1155,98 mm) oder eine Datei, die mit 72 DPI auflöst: 1 Punkt × 65.536 = 65.536 Punkte (~23.121,1 mm).
WMF-Dateien haben einen 18 Byte langen Kopfbereich (Header), an den nahezu beliebig viele Abschnitte (records) mit Objekt-Definitionen angehängt sein können, die auf Funktionen des Windows-GDI zurückgreifen. Zum Austausch über Programmgrenzen hinweg stellen viele Programme der WMF-Datei einen zusätzlichen 22 Byte langen Kopfbereich (Header) voran, der an den hexadezimalen Startbytes D7-CD-C6-9A erkennbar ist (als INTEL 32-Bit-DWORD interpretiert: 9AC6CDD7).
Die vollständige Spezifikation ist auf CD im „Microsoft Developer Network“ (MSDN) publiziert worden.
Windows Enhanced Metafile (EMF)
Windows Enhanced Metafile (EMF) ist eine Weiterentwicklung von WMF. Im Gegensatz zu WMF verwendet es für die Definition von Bildkoordinaten ein 32-bit-Format. EMF wird auch als Druckersprache verwendet.