Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten? (https://www.delphipraxis.net/210633-idee-vektor-screenshot-tool-svg-fuer-delphi-vcl-interessenten.html)

jziersch 20. Mai 2022 14:11

AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
 
Hallo,

das ist eine coole idee. Mit ein paar Zeilen code kann man schon einiges erreichen:

Code:
procedure TForm6.Button3Click(Sender: TObject);
var meta : TMetafile;
    can : TMetafileCanvas;
begin
   meta := TMetafile.Create;
   can := TMetafileCanvas.Create(meta, 0);
   try
     Self.PaintTo(can.Handle, 0,0);
   finally
     can.Free;
   end;
   meta.SaveToFile('s:\out.emf');
   meta.Free;
end;
Alle Panels werden bei mir als bitmaps ausgegeben, nicht als gefüllte Rechtecke. Evtl kann man dies abfangen oder die gleichfarbigen Bilder später erkennen und in entsprechende FillRects wandeln.

EMF ist natürlich nicht so schön wie SVG, aber skaliert auch.

Uwe Raabe 20. Mai 2022 14:38

AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
 
Gab es von Winsoft nicht mal eine SVG-Canvas?

Medium 20. Mai 2022 15:36

AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
 
Vorab als Kontext: Meine Bachelorarbeit war ein Rasterbild-Kompressionsverfahren, dass auf Kantendetektion mit Wiederherstellung aus den Kanten basiert hat. Die gesamte Entwicklung hat etwas über 2 Jahre gedauert, und die Endergebnisse waren zum einen so aufwendig, dass ich via Shader (heutzutage wohl eher CUDA bzw. andere GPU APIs) eine Grafikkarte ein paar Sekunden für ein FullHD-Bild damit beschäftigen konnte, und zum anderen dennoch zu sehr "comic like", dass ein Differenz-Bitmap nötig war. Je nach Bildinhalt war das deutlich besser oder schlechter als JPEG (das Differenzbild war sogar im Grunde ein JPEG), am Ende aber insgesamt VIEL zu viel Rechenaufwand für den Zweck. Hat mir dennoch einen sehr guten Abschluss beschert, war aber doch mehr nur theoretisches Beinevertreten. (Meine Prüfer waren der Meinung, dass der Gesamtumfang eher einer Master-Arbeit angemessen gewesen wäre, eher darüber hinaus. War aber eher ein Spaß-Projekt, dass ich dann zum Abschlussthema umgewandelt hatte.)

Vektorisieren von Rastergrafiken ist auch heute noch kein einfaches Unterfangen, vor allem wenn man so Details wie Farbverläufe und Strichbreiten berücksichtigen muss. Soll heißen: Wenn du keinen Zugriff auf bereits in einem Vektorformat vorliegende Daten hast - und zwar komplett - dann ist eine qualitativ nutzbare Ausführung eine Sache von Mannjahren. Da große Teile der von der VCL genutzen Grafiken der WinAPI nicht in solch einem Format vorliegen, halte ich das Vorhaben für unrealistisch, mindestens aber die möglichen Ergebnisse für begrenzt Einsetzbar.

jziersch 20. Mai 2022 16:21

AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
 
Zitat:

Zitat von Medium (Beitrag 1506115)
Vektorisieren von Rastergrafiken ist auch heute noch kein einfaches Unterfangen

Vekorisieren ist hier nicht erforderlich. Es sollen lediglich die auf einem Form enthaltenen Komponenten rekursiv durchlaufen werden und dann von innen nach außen als Vektoren abgespeichert werden.

Mein Vorschlag geht einen andern Weg indem er die vorhandene Paint routine nutzt. Linien werden hier tatsächlich als Striche ausgegeben, Texte sowieso als Text.

Redeemer 20. Mai 2022 18:30

AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
 
Zitat:

Zitat von jziersch (Beitrag 1506110)
Hallo,

das ist eine coole idee. Mit ein paar Zeilen code kann man schon einiges erreichen:

Code:
procedure TForm6.Button3Click(Sender: TObject);
var meta : TMetafile;
    can : TMetafileCanvas;
begin
   meta := TMetafile.Create;
   can := TMetafileCanvas.Create(meta, 0);
   try
     Self.PaintTo(can.Handle, 0,0);
   finally
     can.Free;
   end;
   meta.SaveToFile('s:\out.emf');
   meta.Free;
end;
Alle Panels werden bei mir als bitmaps ausgegeben, nicht als gefüllte Rechtecke. Evtl kann man dies abfangen oder die gleichfarbigen Bilder später erkennen und in entsprechende FillRects wandeln.

EMF ist natürlich nicht so schön wie SVG, aber skaliert auch.

Hab das gerade mal ausprobiert. Die Unterstützung für die erstellte EMF in unterschiedlichen Vektoreditoren ist unterschiedlich, aber überall schlecht:
  • Affinity: Komplett unbrauchbar. Besonders auffällig: Fast alle Objekte (insbesondere alle Texte) werden in der oberen linken Ecke platziert, außer der Hintergrund von TButton, TRadioButton, TCheckBox, TListBox, TTreeView, TProgressBar und TTrackbar
  • Inkscape: schlecht, kaum brauchbar. Besonders auffällig: Der Text von TMemo wird durch irgendwelchen Blödsinn ersetzt.
  • Word (nach "Bild bearbeiten"): schlecht, marginal schlechter als Inkscape. Besonders auffällig: Word ist als einziges der drei Programme nicht Unicode-fähig.
Durch Vergleich untereinander und mit einer Ausgabe über den Microsoft PDF Printer via TPrinter komme ich zu folgender Vermutung:
TLabel 100% Vektor
TEditRahmen Vektor, Text Raster
TMemo100% Vektor
TButtonRahmen Raster, Text Vektor
TGroupBoxRahmen Raster, Text Vektor, Text Vektor
TRadioButtonSymbol Raster, Text Vektor
TCheckBoxSymbol Raster, Text Vektor
TStatusBarRahmen und Symbol Raster, Text Vektor
TListBox100% Vektor
TComboBox - ComboBoxRahmen und Symbol Raster, Text fehlt
TComboBox - SimpleRahmen des Eingabefelds im Fokus-Status und Raster, Text fehlt, Listbox fehlt komplett
TComboBox - ComboBoxListRahmen und Symbol Raster, Text Vektor
TTreeViewRahmen und Symbole Raster, Text Vektor
TProgressBar100% Raster
TScrollBar100% Raster
TTrackBar100% Raster
TTabControlRahmen Raster, Text Vektor
Ist nicht so toll.

jziersch 20. Mai 2022 18:41

AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Viele Software macht bei EMF schlapp, allerdings konnte ich mit meinem PDF Konverter wPDF das Ergebnis nach PDF wandeln un dieses wiederum mit PhotoLine nach SVG. Das Ergebnis hängt hier an.

Ich teile Deine Erfahrung. Insbesondere die Edits sind dann Raster.

TurboMagic 20. Mai 2022 18:54

AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
 
Wie sieht es mit WMF aus?
Evtl. können manche Programme besser.

himitsu 20. Mai 2022 19:47

AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
 
SVG kann doch aber auch Rastergrafiken enthalten, oder nicht?

Also wäre es möglich Teile via Vectorbestandteilen und Anderes pixelig zu haben.

delphifan2004 21. Mai 2022 17:57

AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
 
Ich beleuchte das mal aus Anewendersicht.

Wo brauche ich denn Vektorgrafik? Als Anwender will ich mein Monitorbild schell und unkompliziert ohne knstliche Verzögerung angzeigt bekommen, da nervt mich schon jede Flash Amimation auf der Wecseite, oh Mann eh da das Bild aufgebaut ist!

Als Computerspieler, der ich aber nicht bin, würde ich vielleicht Geld für die teure High End Grafikkarte ausgeben. Aber ich bin kein Computerspieler ich will nur mein Monitorbild anständig angezeigt haben.

Ich habe mir das Open Source Programm Blender angeschaut. Super, was ich damit an Anomtionen erstellen kann. Aber warum kann ich dort ein gerendertes Bild auf meinem Rechner nicht anzeigen, obwohl einfache Spiele auch in 3D funktionieren? Ganz einfach, Blender rechnet hochausflösend und somit mathematisch exakt. Meine Grafik ist eine simple OnBoard Grafik, die zum Anzeigen von Windows völlig ausreicht, auch performant anzeigt, aber bei aufwendigen Grafikanimationen völlig berfordert ist. In Computerspielen werden Näherungsrechnungen verwendet, deshalb kann dann sogar meine OnBoard Grafik diese Animationen anzeigen. Und High End Spiele, die wirklich so eine teure Grafikkarte erfordern, spiele ich nicht, da ich nicht so ein Spielefan bin.

Langer Rede kurzer Sinn, ich will eine schnelle Bildschirmausgabe für meine Anwendungen, da sehe ich in Vektorgrafik nach all dem vorher gesagten hier, keinen Nutzen für mich. Der Rechenaufwand ist höher, die Performance dürfte massiv leiden und ich bin einer von denen die nicht gewillt sind, sich die neuste Hardware anzuschaffen, nur damit das brandneue Programm läuft. Im Zweifelsfall nehme ich dann eben eine Uralt Version davon. Die mag nicht alles können, was dieneuste Version vielleicht kann, aber was ich für den Alltag brauche, kann mit Sicherheit auch die Uralt Version. Und die läuft dann auch auf meinem alten Rechner.

Auch irgendeine Grafikanimation mit Blender wäre mir lieber mit einfacherern Algos erstellt, die auch mir mit der Onboard Grafik die Chance geben, das Ergbnis meiner gerenderten Grafik zu sehen, Grafiken die mit Blender erstellt wurden, kann ich ja wenn ich sie von fremden als .jpg Dateien bekomme, auch wieder und sogar mit dieser meiner OnBoard Grafikkarte anzeigen. Da wünschte ich mir für Blender eine Einsterllung der Rechengenauigkeit, die ich so lange verringern kann bis ich mit meiner Hardware die gernderte Animation sehen kann wie das andere bei ihren youtube Demos von Blender auch können.

Also lehen ich schon aml auf meinem Recner alles ab, was mich zu teuren Neuanschaffungen zwingt, nur damit ich die tolle Grafik bei mir auch anzeigen kann. Rastergrafik ist da günstiger, die sehe ich schneller.

Ist nicht böse gemeint, aber ein Programmierer sollte schon wissen wie die Anwender ihrer Software ticken. Deshalb dieser Beitrag.

Uwe Raabe 22. Mai 2022 09:46

AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
 
Zitat:

Zitat von delphifan2004 (Beitrag 1506160)
Also lehen ich schon aml auf meinem Recner alles ab, was mich zu teuren Neuanschaffungen zwingt, nur damit ich die tolle Grafik bei mir auch anzeigen kann. Rastergrafik ist da günstiger, die sehe ich schneller.

Wenn ich das richtig verstanden habe, geht es Janni gar nicht um die Anzeige am Bildschirm, sondern eher um sowas wie Druckerzeugnisse:

Zitat:

Zitat von Redeemer (Beitrag 1506098)
Ich überlege, eine Unit zu stellen, mit der man von einem Delphi-VCL-Programm einen Vektor-Screenshot im SVG-Format erstellen kann, um qualitativ hochwertige und einfach lokalisierbare Dokumentation zu erstellen.



Alle Zeitangaben in WEZ +1. Es ist jetzt 05:40 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz