Delphi-PRAXiS

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/)
-   -   Delphi 12, skia, SVG > PNG, (SpeedButton) (https://www.delphipraxis.net/214125-delphi-12-skia-svg-png-speedbutton.html)

looseleaf 21. Nov 2023 15:02

Delphi 12, skia, SVG > PNG, (SpeedButton)
 
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

QuickAndDirty 21. Nov 2023 15:12

AW: Delphi 12, skia, SVG > PNG, (SpeedButton)
 
Ich nehme an, du willst nicht die SVGIconImageList für VCL und FMX über Get-IT installieren?
Da sind auch TSVGICONIMAGE usw drin.

looseleaf 22. Nov 2023 13:25

AW: Delphi 12, skia, SVG > PNG, (SpeedButton)
 
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?

Uwe Raabe 22. Nov 2023 13:37

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

Zitat von looseleaf (Beitrag 1529933)
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;

QuickAndDirty 23. Nov 2023 16:14

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

Zitat von looseleaf (Beitrag 1529933)
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.

BastiFantasti 13. Mär 2024 08:12

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

Zitat von Uwe Raabe (Beitrag 1529935)
Zitat:

Zitat von looseleaf (Beitrag 1529933)
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

BastiFantasti 13. Mär 2024 08:26

AW: Delphi 12, skia, SVG > PNG, (SpeedButton)
 
Liste der Anhänge anzeigen (Anzahl: 1)
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.

Rollo62 13. Mär 2024 08:55

AW: Delphi 12, skia, SVG > PNG, (SpeedButton)
 
Vielleicht musst Du explizit die SVG-Unit mit angeben.
https://angusj.com/image32/Docs/Unit....SVG/_Body.htm

BastiFantasti 13. Mär 2024 12:59

AW: Delphi 12, skia, SVG > PNG, (SpeedButton)
 
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
  ;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 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