![]() |
RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
Liste der Anhänge anzeigen (Anzahl: 3)
Da ich für ein eigenes Projekt SVG-Unterstützung (für Tiny 2.0, statisch) brauchte, aber mit den bestehenden Lösungen nicht zufrieden war (viel zu viele benötigte fremde Pakete), habe ich mir kurzerhand selbst eine geschrieben, die nur mit den Delphi-Canvas-Funktionen und GDI (nicht GDI+) arbeitet. Der Quelltext ist relativ klein. Es werden mein eigener XML-Reader (wegen der vielen nicht zwingend zu schließenden Tags) und diverse Parser, z.B. für Style-Angaben, verwendet. Die eigentliche SVG-Klasse ist etwa 1000 Zeilen lang. Der mit Abstand größte Teil des Projekts, das mit Vanilla-Delphi ab 2009 (wegen Generics) kompiliert, ist die Tabelle mit den XML-Entities (was nicht mal Inkscape unterstützt)... Alles in allem kompiliert derzeit zu gerade mal 150 KiB und LZMA-gepackt irgendwo bei unter 30 KiB plus PNG-Image wenn ihr das nicht schon nutzt.
Funktionsweise:
Nennenswerte Einschränkungen:
Tipps:
Lizenz: Die Nutzung ist kostenlos. Wer es in einem eigenen Produkt verwendet, das nicht für den Eigenbedarf ist, muss mir eine Nachricht schreiben. Weiterentwicklungen und Ableitungen der Klasse TSVGImage müssen mir auf Wunsch zur Verfügung gestellt werden. Feedback ist gerne gesehen! ![]() ![]() ![]() |
AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
Hallo Redeemer,
schön das sich mal jemand dieses Themas annimmt. Ich finde SVG ist ein total unterschätztes Format, und die bisherigen Lösungen die ich gesehen habe sind viel zu fett. Deine kleine Library, mit den Basic-Funktionen und wenn möglich Support für Layer, wäre genau das was ich suche. Ist das jetzt bei dir der Plan als Freeware, OpenSource, o.ä. anzubieten ? Ich hätte mal folgende Frage, weil ich sehe das du Referenzen zu Windows/GDI drinhast. Wärest du daran interessiert die Library für VCL und FMX fit zu machen, oder ist das schon dein Plan ? Ich verstehe aber das du mit D2009 unterwegs bist, das könnte schwierig werden :stupid: Ansonsten muss ich leider berichten das ich die Beispielbilder mit deiner Demo nicht laden kann. Vermutlich waren das die Fehlerbilder für uns zum Testen, richtig ? In den Code habe ich noch nicht tiefer geschaut, ich denke das DemoProgramm dafür fehlt, deshalb kann ich auch nicht debuggen. Einfachere SVG kann ich aber mit dem Demo anzeigen lassen, das ist schonmal super. Rollo |
AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
Das ist interessant. Wegen der hochauflösenden Monitore spiele ich mit dem Gedanken, die Png's für Toolbar und co. durch SVG's zu ersetzen. Werde ich mir ansehen...
Aber spontan ist mir das ins Auge gefallen: Zitat:
Delphi-Quellcode:
type
TCustomUTF8Encoding = class(TUTF8Encoding) public constructor Create; override; end; ... { TCustomUTF8Encoding } constructor TCustomUTF8Encoding.Create; begin inherited Create(CP_UTF8, 0, 0); // Embas UTF8 setzt MB_ERR_INVALID_CHARS und führt zu dem Problem FIsSingleByte := False; end; ![]() |
AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
Zitat:
Da FMX ja plattformunabhängig ist, frage ich mich auch, inwieweit das mit GDI machbar sein soll. Zitat:
Das Bild der Landshut funktioniert wie erwähnt nur, wenn man die Höhenangabe (height) aus dem SVG-Tag löscht. Ich habe kurz vor Release Support für die wissenschaftliche e-Schreibweise von Zahlen eingebaut und übersehen, dass ich den Exponenten nur auf Kommazahlen, nicht jedoch auf Ganzzahlen (wie hier 1e3) anwende (letzte Zeile von RedeemerFloat, ergänze "* Exponent"). Zitat:
![]() ![]() Zitat:
/Edit: Die Grenze zwischen Äthiopien und Eritrea fehlt in Firefox und im Wikimedia-Rasterisierer, worauf auch immer der basiert. Umso lustiger, dass sie in einer früheren Version meiner Engine da war, wonach ich kaum noch was geändert habe... |
AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
Hallo Redeemer,
ein wirklich tolles Projekt, aber leider mit derartigen Ladezeiten (noch) nicht wirklich nutzbar. Diese Karte: ![]() wird zwar geladen, Dein Demo braucht dazu aber, statt wie der Browser < 1 Sekunde, bei mir auf dem PC über 7 Sekunden. Da gibt es doch bestimmt noch einiges zu optimieren, oder? Andere Dateien scheinen allerdings überhaupt nicht zu funktionieren: ![]() zumindest habe ich hier nach 5 Minuten Eieruhr das Programm abgebrochen. Ich finde Dein Projekt durchaus interessant, vor allem weil es bisher keine freie Komponente zu geben scheint, die auch wirklich produktiv nutzbar ist. Das es mit Delphi durchaus kompakt und schnell funktioniert, zeigt ![]() Gruß Micha |
AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
Liste der Anhänge anzeigen (Anzahl: 1)
Wieso lädt das bei euch ?
Wenn ich die Datei mit deinem Demo öffne, mit Lade SVG, z.B. das letzte mit Germany_location_map.svg, dann kommt das siehe Anhang. Genauso bei den beiden orginalen Beispielen. Nur sehr einfache Icons hatte ich noch getestet, die funktionierten. Rechner: Win10-Pro aktuell Rollo |
AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
Keine Ahnung, warum es bei dir nicht läuft. Habe das mit der Geschwindigkeit korrigiert (bei größeren Dateien locker Faktor 100 und mehr), da ich wegen Bahnchaos seit langer Zeit in einer Stadt festsitze, die es noch nicht mal gibt.
Grund für die Performanceprobleme war praktisch nur eine einzige Funktion: StrUtils.MidStr. Meine eigenen Funktionen waren nicht Schuld. Habe MidStr durch Copy ersetzt und einige andere Optimierungen mit Generics.Collections.TDictionary durchgeführt. Changelog liegt bei. Link hat sich nicht geändert. Danke für das Feedback schonmal. Warum es bei dir nicht geht, Rollo, weiß ich nicht. Kannst ja mal probieren, das selbst zu kompilieren. |
AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
Zitat:
Ab welcher Delphi-Version ist es kompilierbar? Gruß Micha |
AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
Ist mit Delphi 2009 geschrieben. Sollte aber mit allen nachfolgenden laufen, da es nur sehr wenige grundlegende Delphifunktionen verwendet und stattdessen viele GDI-API-Calls.
|
AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
Schade. Ich habe noch ein anderes Projekt hier, welches mit Delphi 2007 geschrieben wurde und dort hätte ich gerne eine WMF-Lösung durch SVG ersetzt. Leider funktioniert nämlich auch die schon von mir erwähnte kommerzielle SVG-Komponente nicht mehr unter Delphi 2007.
Gruß Micha |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz