Delphi-PRAXiS
Seite 1 von 2  1 2      

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 .png Dateien in ImageList laden (https://www.delphipraxis.net/209681-png-dateien-imagelist-laden.html)

xbkbk 8. Jan 2022 20:39

.png Dateien in ImageList laden
 
Guten Tag,

ich möchte gerne in einer FMX App sehr viele Bilder von Google Material Icons nutzen. Das sind in meinem Fall 460 Bilder vom Typ PNG. Früher hatte ich nur einige wenige Bilder (maximal 10), bei denen es problemlos möglich war, für jedes Bild ein eigenes TImage zu verwenden - da hab ich auch Bilder laden können. Da ich nun allerdings nicht 460 TImages erstellen und jedes Bild manuell reinladen möchte hatte ich die Idee, eine TImageList zu verwenden, hab sie also auf die Form gezogen, den Bilderlisteneditor geöffnet und dann auf hinzufügen geklickt. Wenn ich da jedes Bild einzeln hinzufüge funktioniert das auch, allerdings kann ich nichtmal 4 Bilder auf einmal hinzufügen. Da steht dann immer:

0 - Quellen hinzugefügt
0 - Quellen geändert
0 - gesamt
0 - nicht unterstützte oder fehlende Bilder
0 - Bilder haben inkorrekte Größe
460 - übersprungene Bilder

(oder statt 460 halt 2, 3, 4 oder wie viele Bilder auch immer ich nehme)

Nun ist meine Frage, wie ich es schaffe, ohne großen Aufwand 460 PNG Dateien auf einmal in meine FMX App (bei Designtime, nicht Runtime) zu integrieren, sodass ich diese später dynamisch aus der TImageList laden kann.


Zusätzliche Informationen:
- Die Bilder haben eine Größe von 192 x 192
- Die Bilder sind transparent und sollen es auch später beim Nutzen sein
- ich verwende Delphi 10.4.2 Community Edition

himitsu 8. Jan 2022 21:32

AW: .png Dateien in ImageList laden
 
Ich würde ja eher empfehlen die Bilder in den Ressurcen abzulegen.

* selbst eine .RC oder direkt eine .RES erstellen und einbinden
* oder Menü > Projekt > Ressourcen und Bilder

.LoadFromResourceName im TPngImage (Vcl.Imaging.pngimage)



Deine DFM wird ja sonst nur unnötig groß.
Im FormDesigner muß sie dann auch noch bis zu 3 mal in den RAM.
Als TextDFM, dann BinärDFM und zum Schluß noch in die Form-Instanz und beim Speichern ebenfalls, nur umgekehrt.

venice2 8. Jan 2022 21:41

AW: .png Dateien in ImageList laden
 
Zitat:

Ich würde ja eher empfehlen die Bilder in den Ressurcen abzulegen.
Besser noch eine Ressourcen DLL erstellen.

Aber darum geht es ihm nicht.

Es ist für ihn zu viel Arbeit jede *.png einzeln zu einer Ressource hinzuzufügen.
Er möchte das in einem Rutsch machen.

xbkbk 8. Jan 2022 22:49

AW: .png Dateien in ImageList laden
 
Zitat:

Besser noch eine Ressourcen DLL erstellen.
Eine DLL scheidet schonmal aus, da ich mein Programm Crossplatform machen möchte, also mindestens auch Android und ggf. später auch Mac OS X, iOS (und Linux).

Zitat:

oder Menü > Projekt > Ressourcen und Bilder
Das hat super funktioniert. Vielen Dank :)
Die kompilierte .exe Datei ist jetzt mit 460 Bildern mehr weniger als 1 MB größer. Damit bin ich zufrieden. Bei anderen Plattformen wird der Größenunterschied der kompilierten Datei vermutlich recht ähnlich sein. Damit bin ich sehr zufrieden.

Falls jemand auf diesen Post stößt der das gleiche Problem wie ich hat gibts hier direkt noch den Code, um die PNG Datei in ein TImage zu laden:
Code:
var
  PngStream: TResourceStream;
begin
  PngStream := TResourceStream.Create(HInstance, 'PngImage_42', RT_RCDATA);
  try
    Image1.Bitmap.LoadFromStream(PngStream);
  finally
    PngStream.Free;
  end;
end;

himitsu 8. Jan 2022 22:55

AW: .png Dateien in ImageList laden
 
Da es PNG sind, würde ich zum Laden vielleicht nicht TBitmap verwenden, sondern Graphic, mit einem TPNGImage drin.

Und, wie gesagt Delphi-Referenz durchsuchenTGraphic.LoadFromResourceName (was auch TBitmap, TPngImage usw. alle kennen ... gut, intern macht es praktisch das Gleiche, nur kürzer)

xbkbk 8. Jan 2022 23:10

AW: .png Dateien in ImageList laden
 
Zitat:

Zitat von himitsu (Beitrag 1500311)
Da es PNG sind, würde ich zum Laden vielleicht nicht TBitmap verwenden, sonder Graphic, mit einem TPNGImage drin.

Und, wie gesagt Delphi-Referenz durchsuchenTGraphic.LoadFromResourceName (was auch TBitmap, TPngImage usw. alle kennen ... gut, intern macht es praktisch das Gleiche, nur kürzer)

Graphic mit TPNGImage? Ich weiß absolut nicht was du meinst Ich habe weder ein TGraphic noch ein TPNGImage und weiß auch nicht, wo man das herbekommt. Aber das was ich da in meinem letzten Post habe funktioniert ja an sich, also was genau spricht gegen diesen Ansatz? Das Ding ist halt, dass ich wie erwähnt nicht VCL sondern mit FMX (also nicht nur für Windows) programmiere. TGraphic (sowie auch TPNGImage) sind bei meinen Recherchen als rein unter VCL nutzbar angezeigt gewesen.

Uwe Raabe 9. Jan 2022 00:11

AW: .png Dateien in ImageList laden
 
Frank hat offenbar übersehen, dass es hier um FMX geht.

himitsu 9. Jan 2022 00:14

AW: .png Dateien in ImageList laden
 
eigentlich nicht, abr grade wo du es sagst ... falsche Unit und dort dann weiter falsch gesucht. :wall:

Hmmmm, gab es im FMX nicht auch was, dass PNG kann, oder macht Bitmap das mit?

[edit] finde im FMX nur was bezüglich Drag&Drop mit TBitmap+NSPasteboardTypePNG

xbkbk 9. Jan 2022 00:17

AW: .png Dateien in ImageList laden
 
Zitat:

Zitat von himitsu (Beitrag 1500316)
eigentlich nicht, abr grade wo du es sagst ... falsche Unit. :wall:

Hmmmm, gab es im FMX nicht auch was, dass PNG kann, oder macht Bitmap das mit?

Naja also in meinem Beispiel macht Bitmap das mit. Widerstrebt mit zwar irgendwie auch, PNG in ein Bitmap zu laden, aaaaaber: es funktioniert.

Uwe Raabe 9. Jan 2022 00:31

AW: .png Dateien in ImageList laden
 
In FMX ist ein TBitmap halt eben kein Wrapper um ein Windows HBITMAP, sondern unterstützt durch Verwendung von TBitmapCodecManager auch andere Formate, die in den entsprechenden FMX.Canvas.<xxx>.pas Units dort registriert werden. Das FMX-TBitmap ist somit ähnlich dem VCL-TGraphic, nur mit etwas mehr Flexibilität.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 Uhr.
Seite 1 von 2  1 2      

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