*.wmf nicht erkannt

Rund um die LCL und andere Komponenten

*.wmf nicht erkannt

Beitragvon Mathias » 4. Aug 2016, 19:12 *.wmf nicht erkannt

Ich habe ein altes Delphi-Programm konvertiert, dort habe ich mit
Code: Alles auswählen
Image1.Picture.LoadFromFile(KabelTyp + '.wmf')

wmf-Dateien eingebunden.
Sowohl unter Windows, wie Linux, kommt Format unbekannt.

Was ist die einfachste und sauberste Lösung, um diese Dateien auch mit Lazarus zu verwenden ?

Gut, ich könnte es in PNG umwandeln, aber da es sich um Linienzeichnungen handelt, will ich dies eigentlich nur zur Not machen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4416
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 4. Aug 2016, 23:24 Re: *.wmf nicht erkannt

Soviel ich weiß, wird wmf/emf von FPC/Lazarus nicht unterstützt. In TAChart gibt es eine Windows-Only Unit (TADrawerWMF) für WMF-Export, die allerdings in the TAChart-Infrastruktur eingebunden ist, obwohl es nicht schwer sein sollte, die Klassen TMetaFile und TMetafileCanvas für allgemeine Nutzung zu extrahieren. Im Rahmen von TAChart funktioniert der Code gut (obwohl ich da nicht viel getestet habe - die Routine stammt von Alexander Klenin), und eine Standalone-Anwendung habe ich noch gar nicht probiert - hier wäre dein Pioniergeist gefragt. Aber wiegesagt, das geht nur für Windows. In http://bugs.freepascal.org/view.php?id=14333 wird eine plattformübergreifende Lösung diskutiert (siehe die dort angehängte Datei lmf.pas), aber diese Aktivität scheint eingeschlafen zu sein, auch wird auch nicht gleich den Komfort eines "Picture.LoadfromFile" haben.
wp_xyz
 
Beiträge: 3073
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 5. Aug 2016, 16:43 Re: *.wmf nicht erkannt

Einmal vorweg, eine wmf ist keine Pixelgrafik, so wie zB. bmp/jpg.
Ich habe mich mal kurz schlau gemacht, es ist vergleichbar mit eine CAD-Zeichnen, es wird gesagt, zeichne Linie, zeichne Kreis, etc.
Wen man den genauen aufbau kennen würde, könnte man die wmf entschlüsseln.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4416
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon af0815 » 5. Aug 2016, 17:18 Re: *.wmf nicht erkannt

Mathias hat geschrieben:Wen man den genauen aufbau kennen würde, könnte man die wmf entschlüsseln.


Lt. Wiki https://en.wikipedia.org/wiki/Windows_Metafile
Code: Alles auswählen
Die vollständige Spezifikation ist auf CD im „Microsoft Developer Network“ (MSDN) publiziert worden.


Falls du damit was machen willst, die Spezifikation ist mittlerweile hier zu finden https://msdn.microsoft.com/en-us/library/cc250370.aspx. Sind so schlaffe 200 Seiten Spez, viel Spaß :-)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3874
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon wp_xyz » 5. Aug 2016, 17:22 Re: *.wmf nicht erkannt

Mathias hat geschrieben:Einmal vorweg, eine wmf ist keine Pixelgrafik, so wie zB. bmp/jpg.

Habe ich das behauptet?

Mathias hat geschrieben:Wen man den genauen aufbau kennen würde, könnte man die wmf entschlüsseln.

Z.B.:
https://winprotocoldoc.blob.core.window ... es/MS-WMF/[MS-WMF].pdf
https://www.symantec.com/avcenter/refer ... format.pdf
Viel Spaß.
wp_xyz
 
Beiträge: 3073
Registriert: 8. Apr 2011, 08:01

Beitragvon MacWomble » 5. Aug 2016, 18:48 Re: *.wmf nicht erkannt

Mathias hat geschrieben:Gut, ich könnte es in PNG umwandeln, aber da es sich um Linienzeichnungen handelt, will ich dies eigentlich nur zur Not machen.


Ich würde diese in svg umwandeln, da wmf ein MS-internes Format ist. (z.B. mit Inkscape)

Ich glaube fpvectorial und aggpas können das verarbeiten.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
Lazarusforum e. V.
 
Beiträge: 914
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.2 Cinnamon / CodeTyphon 7.1 v. 18.02.2020/ FP 3.3.1 Rev 2002180516 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon Martin V » 6. Aug 2016, 16:39 Re: *.wmf nicht erkannt

Das Windows WMF/EMF Format war nie wirklich fehlerfrei und wurde kaum von Softwareherstellern benutzt. Es ist ein Vektorgrafikformat im Sinne von "ziehe eine Linie von x0,y0 nach x1,y1 mit einer bestimmten Farbe und einer bestimmten Strichdicke; schreibe Text mit einem bestimmten Font, bestimmter Fontgröße und bestimmte Farbe an die Position x,y. Das ganze wird aber nicht allgemein formuliert wie in PS/PDF, sondern in Form von Windows API-Aufrufen. WMF ist also eine Liste von Windows-Funktionsaufrufen, um ein bestimmtes Bild zu zeichnen. Damit ist es per Definition plattform-gebunden. Es basiert auf der Win16-API (also Windows 3.0/3.1 von 1990). Es macht keinen Sinn mehr, dieses Format zu unterstützen.
Martin V
 
Beiträge: 125
Registriert: 30. Jan 2010, 19:35
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon wp_xyz » 6. Aug 2016, 17:44 Re: *.wmf nicht erkannt

Martin V hat geschrieben:WMF ist also eine Liste von Windows-Funktionsaufrufen, um ein bestimmtes Bild zu zeichnen. Damit ist es per Definition plattform-gebunden. Es basiert auf der Win16-API (also Windows 3.0/3.1 von 1990). Es macht keinen Sinn mehr, dieses Format zu unterstützen.

Das sehe ich anders. Jedem GDI-Aufruf entspricht im Prinzip eine Canvas-Methode, zumindest kann man das nachbauen. Eine normale graphische Ausgabe ist auch nichts anderes. Daher sehe ich kein Problem, die in der Datei aufgelisteten GDI-Aufrufe abzuarbeiten und auf dem Canvas auch auf Nicht-Windows-Plattformen auszugeben - es müsste sich nur jemand darum kümmern. Und bloß weil es ein altes Format ist, ist noch lange kein Grund, es zur Seite zu schieben, es gibt sicher noch Unmengen von WMF/EMF-Dateien. Das modernere svg fristet in Lazarus ein halbfertiges Nischen-Dasein (fpvectorial).
wp_xyz
 
Beiträge: 3073
Registriert: 8. Apr 2011, 08:01

Beitragvon Bitschubser » 6. Aug 2016, 17:51 Re: *.wmf nicht erkannt

Martin V hat geschrieben:Es macht keinen Sinn mehr, dieses Format zu unterstützen.


Das würde ich so pauschal ncht sagen.
Wenn man unter Windows progragrammiert kann es das Mittel der Wahl sein um die Zwischenablage zu füllen (wenn zum Beispiel der Benutzer den output meines Porgramms als Bild in M$-Office einbinden will) - mit wmf hat man da keine Probleme mit pixeligem Text und Treppenstufen, wo man für die Bitmap Megabytes für ansehnliche Auflösung bräuchte reichen Kilobytes...
Richtig ist allerdings, dass die Skalierung völlig kaputt ist. Hier kommt man mit trail and error eher vorwärts als wenn man die M$-Doku liest.
Interessant ist dabei, dass soweit ich feststellen konnte die Skalierung beim import in Corel-Draw "korrekter" implementiert ist als in M$-Office.

Frage in dem Zusammenhang: Was würde man unter Linux eigentlich machen wenn man eine Liniengrafik für Import in z.B. OpenOffice in die Zwischenablage schreiben will?
Bitschubser
 
Beiträge: 61
Registriert: 27. Aug 2012, 14:43

Beitragvon MacWomble » 6. Aug 2016, 20:32 Re: *.wmf nicht erkannt

Bitschubser hat geschrieben:
Martin V hat geschrieben:Frage in dem Zusammenhang: Was würde man unter Linux eigentlich machen wenn man eine Liniengrafik für Import in z.B. OpenOffice in die Zwischenablage schreiben will?


SVG
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
Lazarusforum e. V.
 
Beiträge: 914
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.2 Cinnamon / CodeTyphon 7.1 v. 18.02.2020/ FP 3.3.1 Rev 2002180516 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon wp_xyz » 6. Aug 2016, 23:45 Re: *.wmf nicht erkannt

Ich habe gerade ein einfache Zeichnung in LibreOffice Draw unter Linux Mint gemacht und in die Zwischenablage kopiert. Mit meinem Clipboard-Explorer habe ich mir angesehen, was sich nun in der Zwischenablage befindet. Da ist kein SVG dabei, dafür aber - siehe da - WMF und EMF. Ich nehme daher an, dass LibreOffice durchaus WMF/EMF aus der Zwischenablage einlesen kann. Natürlich muss das eigene Programm das unter Linux auch erzeugen können.
Dateianhänge
OODrawToClipboard.png
wp_xyz
 
Beiträge: 3073
Registriert: 8. Apr 2011, 08:01

Beitragvon MacWomble » 7. Aug 2016, 16:45 Re: *.wmf nicht erkannt

da hatte ich was falsch verstanden. LO kann svg und wmf importieren, beim Export ist es wmf.
Da wmf aber ein propriätäres und nicht gut gepflegtes Format ist, sollte man besser das offene svg verwenden.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
Lazarusforum e. V.
 
Beiträge: 914
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.2 Cinnamon / CodeTyphon 7.1 v. 18.02.2020/ FP 3.3.1 Rev 2002180516 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon Mathias » 8. Aug 2016, 16:46 Re: *.wmf nicht erkannt

Ich habe mal provisorisch meine wmf in jpg umgewandelt, so läuft wenigstens das Programm.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4416
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Michl » 12. Aug 2016, 22:12 Re: *.wmf nicht erkannt

So ein Support würde so mancher kommerziellen Softwareschmiede gut stehen :)

Man kann mit Lazarus Trunk per fpvectorial ein WMF laden und dieses auf ein TBitmap.Canvas zeichnen lassen. Funktioniert mit den von mir getesteten WMFs super.

Danke wp_xyz !!!
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2330
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon Mathias » 13. Aug 2016, 16:44 Re: *.wmf nicht erkannt

Man kann mit Lazarus Trunk per fpvectorial ein WMF laden

Da ich die Trunk installiert habe, habe ich einen Ordner /usr/share/lazarus/1.7.52673/components/fpvectorial .
Nur zur Frage, wie binde ich am einfachsten die Units ein, unter Package/Installierte Packages einrichten... kann ich nichts finden.

Ich denke kaum, das ich manuelle über Project-Einstellungen/Pfade den Pfad dort eingeben muss, oder gar die Dateien raus kopieren muss.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4416
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried