AGB  ·  Datenschutz  ·  Impressum  







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

.png Dateien in ImageList laden

Offene Frage von "himitsu"
Ein Thema von xbkbk · begonnen am 8. Jan 2022 · letzter Beitrag vom 9. Jan 2022
Antwort Antwort
Seite 1 von 2  1 2      
xbkbk

Registriert seit: 9. Jul 2012
Ort: 37083 Göttingen
61 Beiträge
 
Delphi 10.4 Sydney
 
#1

.png Dateien in ImageList laden

  Alt 8. Jan 2022, 20:39
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
Felix
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#2

AW: .png Dateien in ImageList laden

  Alt 8. Jan 2022, 21:32
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: .png Dateien in ImageList laden

  Alt 8. Jan 2022, 21:41
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.
  Mit Zitat antworten Zitat
xbkbk

Registriert seit: 9. Jul 2012
Ort: 37083 Göttingen
61 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: .png Dateien in ImageList laden

  Alt 8. Jan 2022, 22:49
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;
Felix
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#5

AW: .png Dateien in ImageList laden

  Alt 8. Jan 2022, 22:55
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 9. Jan 2022 um 00:00 Uhr)
  Mit Zitat antworten Zitat
xbkbk

Registriert seit: 9. Jul 2012
Ort: 37083 Göttingen
61 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: .png Dateien in ImageList laden

  Alt 8. Jan 2022, 23:10
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.
Felix
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: .png Dateien in ImageList laden

  Alt 9. Jan 2022, 00:11
Frank hat offenbar übersehen, dass es hier um FMX geht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#8

AW: .png Dateien in ImageList laden

  Alt 9. Jan 2022, 00:14
eigentlich nicht, abr grade wo du es sagst ... falsche Unit und dort dann weiter falsch gesucht.

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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 9. Jan 2022 um 00:18 Uhr)
  Mit Zitat antworten Zitat
xbkbk

Registriert seit: 9. Jul 2012
Ort: 37083 Göttingen
61 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: .png Dateien in ImageList laden

  Alt 9. Jan 2022, 00:17
eigentlich nicht, abr grade wo du es sagst ... falsche Unit.

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.
Felix
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: .png Dateien in ImageList laden

  Alt 9. Jan 2022, 00:31
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 01:13 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