Wie wird Windows Metafile angezeigt?

8

Ich muss eine Windows Metafile (EMF) mit WPF anzeigen, wie kann ich das tun? p>

Bearbeiten:

Ich würde das Bild vektorbasiert behalten.

    
gliderkite 13.04.2012, 19:41
quelle

2 Antworten

13

Sehen Sie sich die Drittanbieter-Bibliothek Ab2d.ReadWmf an.

Update # 1: Übersicht

Zunächst dieser Beitrag Microsoft gibt an, dass EMF-Dateien in WPF nicht unterstützt werden sollen. Das bedeutet nicht, dass es nicht getan werden kann, nur dass sie sie nicht unterstützen werden.

Wenn man sich die Wikipedia-Seite über das WMF / EMF-Format anschaut, sehe ich EMF als:

  

Im Wesentlichen speichert eine WMF-Datei eine Liste von Funktionsaufrufen, die an die Windows-GDI-Ebene (Graphics Device Interface) ausgegeben werden müssen, um ein Bild auf dem Bildschirm anzuzeigen. Da einige GDI-Funktionen Zeiger auf Rückruffunktionen zur Fehlerbehandlung akzeptieren, kann eine WMF-Datei fälschlicherweise ausführbaren Code enthalten.

Wenn Sie viel mit WPF gearbeitet haben, wissen Sie, dass WPF sich grundlegend von GDI unterscheidet. Ein kurzer Überblick ist verfügbar hier . Dies bedeutet, dass Sie Ihre EMF-Datei einlesen und die GDI-Aufrufe in WPF-Aufrufe übersetzen müssen. Hier ist ein Thread , in dem sie den Prozess besprechen. Das klingt für mich nach viel Arbeit.

Zum Glück bietet Microsoft eine Schnittstelle zum Lesen von Windows Metafiles. Werfen Sie einen Blick auf diesen Thread für ein Beispiel und Die Dokumentation ist hier verfügbar , aber das wird Sie nur auf halbem Weg dorthin bringen, weil es so ist kein WPF Visual. An dieser Stelle denke ich, dass die einfachste Lösung darin besteht, ein WinForms-Steuerelement in Ihrer WPF-Anwendung zu erstellen und es in einem WindowsFormsHost-Steuerelement zu hosten.

Update # 2: Codebeispiel

So zeigen Sie eine EMF-Datei in einer WPF-Anwendung an:

  1. Erstellen Sie ein WinForms-Benutzersteuerelement
  2. Laden Sie Ihre EMF-Datei in ein MetaFile-Objekt und zeichnen Sie sie im OnPaint-Handler.
  3. Fügen Sie einen Verweis auf die WindowsFormsIntegration-Bibliothek
  4. hinzu
  5. Hosten Sie Ihr WinForms-Steuerelement in einem WindowsFormsHost-Element

Benutzerkontrolle:

%Vor%

XAML:

%Vor%     
Dan Busha 13.04.2012, 19:49
quelle
10

Hier ist eine Dienstprogrammfunktion, die eine EMF-Datei lädt und in eine WPF BitmapSource :

%Vor%

Sie benutzen es einfach so:

%Vor%

Der Nachteil ist, dass Sie System.Drawing.dll (GDI +) in Ihre WPF-Anwendung verweisen müssen, aber das sollte kein großes Problem sein.

    
Simon Mourier 19.06.2012 14:05
quelle

Tags und Links