![]() |
ganz simples Vektor-Grafikformat
Hallo,
ich bin am überlegen, dem DFM-Editor eine funktion bereitzustellen um Vektorgrafiken darzustellen. Diese soll benutzt werden, um unbekannte controls darzustellen. Bedingungen: - definition im textformat (für Speicherung in ini) - ohne header etc. - nur einfache Befehle wie linie, rechteck, kreis, text, farbe setzen, etc. - relative definition (%) ich hab mir schonmal SVG und WMF angeschaut, wobei SVG einen nicht unbedeutenden Header mitbringt, und somit der Parser ziemlich riesig ist und WMF nicht textbasiert ist. vielleicht hat der eine oder andere sowas schonmal geschrieben, in der Forumsuche hab ich noch nichts passendes gefunden. habe mir auch schon Gedanken (in Anlehnung an SVG und den Canvas-Methoden) gemacht, wie man sowas realisieren könnte: Linie: LXXYYXXYY (XX,YY => zweistellige prozentuale Angaben, anfangs und Zielpunkt) Rechteck: RXXYYXXYY Elipse: EXXYYXXYY Stifteigenschaften setzen: PSRGB (S=>Style/Mode,1 HexDigit pro Farbkanal, wird gedoppelt [F=>FF]) Hintergrund: BSRGB Schriftfarbe: FSRGB die Definition ggf. per Komma getrennt (wegen besserer Lesbarkeit und Einlesen in stringlist :) ) nur beim Text bin ich noch am grübeln, da ich sowas wie Positionierung/Ausrichtung und schriftgröße mit einbauen müsste... TASXXYY:hier_der_text (A=>Alignment[R,C,L],S=>size[%]) vielleicht fällt jemanden eine bessere Idee an... :) Gruß Frank |
Re: ganz simples Vektor-Grafikformat
Als ich den Titel gesehen hab musst ich spontan an XML denken. Damit ließe sich die Sache leicht realisieren.
mfg, Björn |
Re: ganz simples Vektor-Grafikformat
Hallo,
Zitat:
Gruß xaromz |
Re: ganz simples Vektor-Grafikformat
Evtl. gleich ein Delphi-Win32-Projekt aufsetzen das XAML (jedenfalls die GUI-Beschreibung) als Beschreibung verwendet.
|
Re: ganz simples Vektor-Grafikformat
Zitat:
XML-Code:
Ließe sich einfach mit ein paar Zeilen parsen:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<grafik> <element> <typ>linie</typ> <farbe>rot</farbe> <start>(0:0)</start> <ende>(10:10)</ende> </element> </grafik>
Delphi-Quellcode:
Im Beispiel für das XML Mit einen TJvSimpleXMl der JEDIS verarbeitet. Okay ein richtiges Vektorformat ist es nicht aber vielleicht ein guter Anfang.
function StrToPoint(Str: string): TPoint;
var s, s1: string; p: integer; begin s := StringReplace(Str, '(', '', []); s := StringReplace(s, ')', '', []); p := Pos(':', s); s1 := Copy(s, 1, p-1); result.X := StrToInt(s1); Delete(s, 1, p); result.Y := StrToInt(s); end; procedure TForm1.Button1Click(Sender: TObject); var i: integer; s: string; start, ende: TPoint; Element: TJclSimpleXMLElems; begin Refresh; XML.LoadFromString(Editor.Lines.Text); for i := 0 to XML.Root.Items.Count - 1 do begin Element := XML.Root.Items[i].Items; if Assigned(Element.ItemNamed['typ']) then begin if Element.ItemNamed['typ'].Value = 'linie' then begin if Assigned(Element.ItemNamed['farbe']) then begin s := Element.ItemNamed['farbe'].Value; if s = 'rot' then begin Canvas.Pen.Color := clred; end; // usw. // viell. html farbcodes parsen end; if Assigned(Element.ItemNamed['start'])and Assigned(Element.ItemNamed['ende']) then begin start := StrToPoint(Element.ItemNamed['start'].Value); ende := StrToPoint(Element.ItemNamed['ende'].Value); Canvas.MoveTo(start.X, start.Y); Canvas.LineTo(ende.X, ende.Y); end; end; if Element.ItemNamed['typ'].Value = 'rechteck' then begin //... end; end; // else Fehler behandeln end; end; mfg, Björn |
Re: ganz simples Vektor-Grafikformat
Wie gesagt, das ganze soll ziemlich kompakt sein, da ich dies mit in meine vorhandenen (INI-) Konfigurationsdateien einbauen kann...
weiterhin möchte ich auf XML-Routinen verzichten, da mir unter D3 der entsprechende Parser fehlt bzw. diesen nachzurüsten den Nutzen übersteigt... Gruß Frank |
Re: ganz simples Vektor-Grafikformat
1, Inidateien stoßen schnell an ihre grenzen wenn es geht gruppierte Elemente zu verwenden
2, Ein eigenes XML-Format wird schnell komplexer als man denkt da man über der laufe der Zeit immer mehr Elemente benötigt. Und wenn man sich an ein bestehendes Format (SVG) ranhängt braucht man sich neue Tags keine gedanken zu machen. Man unterstützt halt mehr Elemente. Ein Ansatz wäre evtl. das Tiny-SVG-Format das gegenüber dem "normalen" SVG-Format schon eingeschränkt ist. Für den anfang hat man halt keine 100%ige Tiny-SVG-Unterstützung. |
Re: ganz simples Vektor-Grafikformat
wen es interessiert, ich hab mal angefangen ein eigenes Format zu implementieren, um Vektor-Grafiken relativ platzsparend im Textmodus zu definieren (etwa so wie im ersten Posting).
![]() vielleicht kann es noch jemand anderes gebrauchen ;) Gruß Frank |
Re: ganz simples Vektor-Grafikformat
Moin moin,
Zitat:
Und lesbar ist es auch nicht gerade. Warum verwendest Du nicht vorhandenes ? Z.B. PostScript:
Delphi-Quellcode:
Ist Text, ist nicht so exotisch, braucht auch nicht viel Platz.
0 0 m % moveto
0 200 l % lineto 200 200 l 200 0 l 0 0 l 1 1 0 sc % setrgbcolor f % fill 1 0 0 sc 50 180 m (Hallo) show |
Re: ganz simples Vektor-Grafikformat
Da fällt mir noch HPGL ein, eine ziemlich alte Grafik-Sprache von Hewlett-Packard für ihre Plotter. Es scheint jedoch immer noch aktuell zu sein. Vielleicht ist das etwas für Dich.
PostScript ist zwar genauso gut, nur ist die zu implementierende Stack-Maschine nicht ganz so trivial, wie ein simpler HPGL-Interpreter. Das gilt allerdings nur, wenn man die gesamte Postscript-Sprache implementieren will, ansonsten nehmen die beiden Sprachen sich nicht viel. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:46 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