AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 12, skia, SVG > PNG, (SpeedButton)

Ein Thema von looseleaf · begonnen am 21. Nov 2023 · letzter Beitrag vom 13. Mär 2024
Antwort Antwort
looseleaf

Registriert seit: 25. Mai 2011
69 Beiträge
 
#1

Delphi 12, skia, SVG > PNG, (SpeedButton)

  Alt 21. Nov 2023, 16:02
Liebe Leute,

Wir stellen gerade auf D12 um und da hier skia integriert wurde, freuen wir uns. Unser Plan: SVG Dateien als Grundlage für viele Icons zu verwenden und das Skalieren dynamisch erledigen. Leider können TSpeedButtons offenbar nicht direkt mit SVG umgehen. Aber das nur am Rande. Ich scheitere einfach daran, eine PNG-Datei aus einm SVG zu erstellen, das auf eine dynamische Größe skaliert wurde.

Ich hab den Code auf https://engineertips.wordpress.com/2...a4delphi-tips/ gefunden, der mir aber an der Stelle, wo das ISkImage mit TSkImage.MakeFromEncodedFile('a.png'); gealden wird einfach nur nil retour. Das File existiert und ein TSkSvg auf einem Form kann die Datei problemlos laden und anzeigen.

Der Code hier: https://stackoverflow.com/questions/...y-using-delphi
liefert mir zwar ein Bitmap, allerdings ist das ziemlich verpixelt, durch das Antialiasing an den Rändern beim Übergang von Vordergrund zu Hintergrund (bzw. Transparenz)

Ich scheitere echt daran, rauszufinden, wie ich ein PNG mit Transparenzen hier herausbekomme. Oder für die Speedbuttons ein einfaches, antialiased BMP.

Eine passende mitgelieferte Komponente, die einfach jedes Bildformat kennt und TSpeedButton-kompatibel ist, gibt's nicht, oder?

Danke
Stefan
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.928 Beiträge
 
Delphi 12 Athens
 
#2

AW: Delphi 12, skia, SVG > PNG, (SpeedButton)

  Alt 21. Nov 2023, 16:12
Ich nehme an, du willst nicht die SVGIconImageList für VCL und FMX über Get-IT installieren?
Da sind auch TSVGICONIMAGE usw drin.
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (21. Nov 2023 um 16:14 Uhr)
  Mit Zitat antworten Zitat
looseleaf

Registriert seit: 25. Mai 2011
69 Beiträge
 
#3

AW: Delphi 12, skia, SVG > PNG, (SpeedButton)

  Alt 22. Nov 2023, 14:25
Hm, nicht, wenn es sich vermeiden lässt. Andererseits ist das auch ein open source Projekt. In Wahrheit suche ich nur was, was mir aus einer SVG Datei zur Laufzeit ein sauberes PNG mit Transparenzen liefert in bestimmter Größe und alternativ ein Bitmap ohne Antialiasing, damit keine Übergeänge an den Rändern entstehen.

Hast du Erfahrung damit? Kann man die Bilder zur Laufzeit so skalieren, dass sie in TSpeedButtons sauber aussehen?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.452 Beiträge
 
Delphi 12 Athens
 
#4

AW: Delphi 12, skia, SVG > PNG, (SpeedButton)

  Alt 22. Nov 2023, 14:37
In Wahrheit suche ich nur was, was mir aus einer SVG Datei zur Laufzeit ein sauberes PNG mit Transparenzen liefert in bestimmter Größe und alternativ ein Bitmap ohne Antialiasing, damit keine Übergeänge an den Rändern entstehen.
Ich verwende dafür die Image32 Library von Angus Johnson verfügbar auf GitHub: https://github.com/AngusJohnson/Image32.

Der notwendige Code zum Erzeugen eines PNG aus SVG ist da denkbar simpel:
Delphi-Quellcode:
    var img := TImage32.Create(ASize, ASize);
    try
      img.LoadFromFile(ASourceFileName);
      img.SaveToFile(ATargetFileName);
    finally
      img.Free;
    end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.928 Beiträge
 
Delphi 12 Athens
 
#5

AW: Delphi 12, skia, SVG > PNG, (SpeedButton)

  Alt 23. Nov 2023, 17:14
Hm, nicht, wenn es sich vermeiden lässt. Andererseits ist das auch ein open source Projekt. In Wahrheit suche ich nur was, was mir aus einer SVG Datei zur Laufzeit ein sauberes PNG mit Transparenzen liefert in bestimmter Größe und alternativ ein Bitmap ohne Antialiasing, damit keine Übergeänge an den Rändern entstehen.

Hast du Erfahrung damit? Kann man die Bilder zur Laufzeit so skalieren, dass sie in TSpeedButtons sauber aussehen?
ich habe die in einem Testprojekt benutzt und werde meine aktuellen FMX imagelisten durch die SVG imagelisten aus dieser bibliothek ersetzen.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
BastiFantasti

Registriert seit: 5. Nov 2014
Ort: Baden Württemberg
133 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Delphi 12, skia, SVG > PNG, (SpeedButton)

  Alt 13. Mär 2024, 09:12
In Wahrheit suche ich nur was, was mir aus einer SVG Datei zur Laufzeit ein sauberes PNG mit Transparenzen liefert in bestimmter Größe und alternativ ein Bitmap ohne Antialiasing, damit keine Übergeänge an den Rändern entstehen.
Ich verwende dafür die Image32 Library von Angus Johnson verfügbar auf GitHub: https://github.com/AngusJohnson/Image32.

Der notwendige Code zum Erzeugen eines PNG aus SVG ist da denkbar simpel:
Delphi-Quellcode:
    var img := TImage32.Create(ASize, ASize);
    try
      img.LoadFromFile(ASourceFileName);
      img.SaveToFile(ATargetFileName);
    finally
      img.Free;
    end;
Ich habe das mal mit der Image32 library versucht.
Allerdings werden bei mir keine Bilder geschrieben und auch kein Fehler ausgegeben.

Ich habe es mit LoadFromFile als auch mit LoadFromStream versucht.

Bei der LoadFromFile Methode exportiere ich das SVG in eine temporäre Datei (tmpfile) und lasse das dann wieder laden.
Die Image32 Bibliothek ist mit dem "SVGIconImageList-12-4.1.1" mitinstalliert worden.


Code:
uses
  img32

var
  imgsize,
  imgname: string;
  data: TStringlist;
  isize : integer;
  img : TImage32;
begin
  for imgSize in data do
  begin
    isize := strtoint(imgsize);
    imgname := TPath.Combine(fodlgOutputFile.FileName, itm+'_'+imgsize+'x'+imgsize+'.png');
    img := TImage32.Create(isize,isize);
    try
      img.LoadFromFile(tmpfile);
      img.SaveToFile(imgname);
    finally
      img.Free;
    end;
  end;
Viele Grüße
Bastian
  Mit Zitat antworten Zitat
BastiFantasti

Registriert seit: 5. Nov 2014
Ort: Baden Württemberg
133 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Delphi 12, skia, SVG > PNG, (SpeedButton)

  Alt 13. Mär 2024, 09:26
scheinbar kann er den Bildertyp von der SVG Grafik nicht ermitteln.

in der in LoadFromFile > TImage32.LoadFromStream -> GetImageFormatClass Funktion ist die ImageFormatClassList leer.
Deswegen findet er keinen passenden Bildtyp (siehe Anhang)...

ich recherchiere weiter.
Miniaturansicht angehängter Grafiken
2024-03-13-09_24_13-clipboard.png  
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#8

AW: Delphi 12, skia, SVG > PNG, (SpeedButton)

  Alt 13. Mär 2024, 09:55
Vielleicht musst Du explizit die SVG-Unit mit angeben.
https://angusj.com/image32/Docs/Unit....SVG/_Body.htm
  Mit Zitat antworten Zitat
BastiFantasti

Registriert seit: 5. Nov 2014
Ort: Baden Württemberg
133 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Delphi 12, skia, SVG > PNG, (SpeedButton)

  Alt 13. Mär 2024, 13:59
Super, vielen Dank - so hat es geklappt.

Diese Includes werden benötigt für die SVG -> PNG Konvertierung:

Code:
uses
  img32,
  img32.Fmt.PNG,
  img32.Fmt.SVG
  ;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:01 Uhr.
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