![]() |
Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Hallo zusammen!
Das ist jetzt eine seltsame Frage, die in kein Forum so richtig passt. Ich habe eine Projektidee und wollte mal fragen, ob Interesse an Nutzung und Erweiterung besteht. 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. In meiner Vorstellung würde die Unit bei Einbindung in ein Projekt eine zusätzliche Form erstellen, die einen Button hat, mit dem man einen Screenshot der zuletzt davor aktivierten anderen Form im aktuellen Zustand macht. Alternative Zustände (Hover, gedrückt, Checkboxen), Popup/DropdownMenus, Untermenüs, ComboBox-Listen etc. würden als unsichtbare Objekte gespeichert, die man im Vektoreditor seines Vertrauens einblenden könnte. Die Unit müsste jeden zu unterstützende TControl-Erben einzeln unterstützen. Ich benutze nur die Komponenten aus dem Standard- und Win32-Tab, weshalb ich auch nur diese selbst erstellen würde. Eine einfache Erweiterbarkeit um weitere TControl-Erben (die entsprechenden sie behandelnden Klassen könnten sich registrieren) und neuere Delphi-Versionen ist selbstverständlich, weshalb das Projekt Open Source auf Github wandern würde. Für die Standard- und Win32-Steuerelemente ergibt eine Vererbung meiner Meinung nach keinen Sinn, da sie alle komplett unterschiedlich aussehen. Bei anderen Steuerlementen ergibt es möglicherweise Sinn, ich weiß aber nicht, wie man das umsetzen könnte. Man müsste sich zudem die Optik des Betriebssystems mehr oder weniger hardcoden (im Sinne von: nicht von irgendwelchen User-Skins übernehmen, da der Zugriff hierauf eher kompliziert ist). Da könnte man (außer für die Größe von Fensterrahmen) was mit CSS machen oder sich auf ein bestimmtes Betriebssystem festlegen (das wäre dann Win10, Win11 ist ja derzeit noch in der early pre-Alpha). Ein vergleichbares Projekt gibt es (unabhängig von meiner Idee) für GTK. Die Sache scheint auch nach meiner Einschätzung eher Toolkit-gebunden zu sein und nicht generell z.B. für Win32 machbar. Ich freue mich auf eure Meinungen. |
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Ich habe noch nie etwas gesehen was die klassische Win32-Optik mit ihren Common Controls (was die VCL ja ist) in eine Vektorgrafik rendert. Nicht einmal im Ansatz - Das ist immer Pixelgrafik. Vielleicht ist das ja schon einmal ein Anhaltspunkt, wie herausfordernd die Umsetzung wäre.
Natürlich wäre das ein tolles Projekt, dringende Notwendigkeit habe ich aber ehrlich gesagt noch nicht gesehen, das zwingend als Vektorgrafik zu machen: Grade wenn man seine VCL-Oberfläche schon High Dpi-fähig hat, ein "normaler" Screenshot hat eigentlich immer gereicht. Verpasst man dem Bild noch einen schönen Schatten-Effekt und niemand kann meckern. |
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Zitat:
Die Daten Grafiken sind alle in der UxTheme enthalten. Wäre vielleicht ein Ansatz. Siehe DrawThemeBackground. |
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Das sind aber Rastergrafiken, oder?
|
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Zitat:
So wie ich verstanden habe möchtest du diese doch in Vektorgrafik konvertieren oder? Oder ist das ein Problem Bitmap nach SVG umzulegen? Habe es selbst noch nicht versucht. ![]() |
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Liste der Anhänge anzeigen (Anzahl: 1)
Man kann Rastergrafiken nicht in Vektorgrafiken konvertieren.
(Zumindest nicht, wenn das gut aussehen soll.) Man kann Vektorgrafiken nur von Grund auf erstellen. Und das möchte ich. Das bietet sich auch erst seit Windows 8 an, weil davor der Detailreichtum zu groß war: Aero oder Luna? keine Chance! Bei Windows 10 malst du für einen Button ein einfarbiges Rechteck mit einfarbigem Rahmen und packst einen Text drauf. Fertig. Natürlich kannst du versuchen, einen Aero- oder Luna-Button annähernd mit Gradients und Effekten nachzubauen – aber im Vergleich zu Windows 10 ist das sehr aufwändig. Angehängt mal ein Ausschnitt aus einem Beispiel, das ich aber manuell erstellt habe, in 6-facher Vergrößerung. |
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Zitat:
Wenn es nicht geht hat sich das erledigt.. Sorry |
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Technisch bestimmt interessant umzusetzen, aber ich persönlich habe dafür auch keinen Bedarf.
Und wenn - sagen wir mal - bei Windows 12 wieder Farbverläufe Einzug halten (alles in der Mode kommt wieder), dann wird es wieder haarig. Könntest du denn ggf. die GDI Draw Commands eines Fensters (damit wird doch so das Ganze gezeichnet, oder?) ggf. einfach recorden und dann transformieren auf einen Vektorformat? |
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Das Projekt tönt sehr interessant, aber einen Bedarf sehe ich im Moment leider auch nicht. Wenn ich ein Screenshot einer Form brauche, reicht auch eine Rastergrafik vollkommen. Wenn diese Komponente wesentlich mehr bietet als nur einen einfachen Screenshot, z.B. selber malen, also eine Art SVG-Paintbox, sähe es deutlich sinnnvoller aus für mich.
@TiGü Die ganzen Fenstersymbole, Rahmen, Hintergründe, etc. werde nicht durch Winbdows gezeichnet sondern sind alles Rastergrafiken, die in den Themes fetig hinterlegt sind. |
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Zitat:
|
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:
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.
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; EMF ist natürlich nicht so schön wie SVG, aber skaliert auch. |
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Gab es von Winsoft nicht mal eine SVG-Canvas?
|
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. |
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Zitat:
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. |
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Zitat:
|
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
![]() ![]() Ich teile Deine Erfahrung. Insbesondere die Edits sind dann Raster. |
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Wie sieht es mit WMF aus?
Evtl. können manche Programme besser. |
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. |
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. |
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Zitat:
Zitat:
|
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Hört sich interesant an, aber ich bin jetzt nicht ganz sicher ob ich den eigentlichen Sinn richtig verstanden habe.
Aus meiner Sicht würde ich das so umsetzen, quasi in zwei Phasen: 1. Ein "Form-Baum" Ersteller, der die aktuelle Form, Komponenten, Zustände etc. in XML o.ä. speichert in eine Art Seitenbeschreibungssprache 2. Ein "Renderer", der dann diesen Baum entsprechend in SVG rendert Der 2.) Schritt wäre dann nur einmal pro Komponente ( vielleicht mit etwas Handarbeit ) nötig, aber wie ein Button zu SVG gerendert wird sollte ich in der Regel nur einmal zu implementieren sein, wenn ansonsten Größe, Positionen, Fonts, Wrap, etc. bekannt sind. Gefühlt würde ich annehmen dass das nur bei den Standard-Controls relativ leicht machbar wäre. Das hätte den Vorteil dass man den 2.) Rendererteil mal auswechseln oder leicht erweitern könnte ( z.B. WinXP-Style, Aero-Style, DevExpress, ... ). Der Vorteil wäre auch dass im 1. Teil dann ein sehr optimiertes XML zur verfügung stände, was wie eine komprimierte "Seitenbeschreibungssprache" funktionieren würde. Ich würde aber erstmal schauen ob es nicht vielleicht schon passende Seitenbeschreibungssprachen gibt, mit fällt auf Anhieb jetzt nichts dazu ein. Das müsste meiner Meinung nach funktionieren weil man alles Visuelle am Ende in irgendwelche Primitive auflösen kann ( Polygon, Positionen, Linienstärke, Gradient, Font, Höhe, Breite, ... ). Aber 1:1 pixelgenau wird das wohl nicht, würde ich aber auch nicht unbedingt benötigen. |
AW: Idee: Vektor-Screenshot-Tool (SVG) für Delphi/VCL - Interessenten?
Zitat:
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 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-2025 by Thomas Breitkreuz