Farbtiefe (Grösse in Bytes) von Bitmaps in TImageList hat keinen Einfluss auf Grösse der Anwendung?
-
Hallo Gemeinschaft,
ich habe in einem TImageList-Objekt auf einem (zur Laufzeit dynamisch erstellten) Form zur Designzeit einige Bitmap-Bilder abgelegt. Die Bitmaps wurden mit 24bit-Farbtiefe gespeichert. Inzwischen habe ich festgestellt, dass 8bit-Farbtiefe ausreichend ist. Ich habe daraufhin alle Bilder geöffnet (inzwischen arbeite ich mit dem kostenlosen "Upgrade" Paint.NET => Empfehlung!) und mittels Menüpunkt "Speichern unter" die Bilder mit 8bit-Farbtiefe und Dithering-Level 0 gespeichert. Dadurch ändert sich die Grösse, beispielsweise eines 75x75 Pixel Bitmap, von 17154 Bytes auf 6778 Bytes. Soweit so gut...
Dann habe ich alle Bitmaps im TImageList-Objekt durch ihre neuen 8bit-Vertreter ersetzt und mein Projekt compiliert (sowohl Release-, als auch Debug-Build) und siehe da: die Zielanwendung hat sich, vom Datenumfang her, nicht 1 Byte verändert...!?!Was wird intern mit den Bitmaps in TImageList gemacht? Werden die schon beim Compilieren automatisch von der Farbtiefe her angepasst? Falls ja, kann man steuern, wie angepasst wird? Oder liegt das Problem eventuell woanders?
MfG
-
Hallo
Eine gezielte Steuerung der Bitmaps hast du wohl nur wenn du Windows-Resourcen verwendest.
bis bald
akari
-
Ahh, scheinbar schon wieder ein Vorteil von Windows-Ressourcen... Ich werd' versuchen dafür mal Zeit zu finden!
Aber merkwürdig ist das beschriebene Verhalten schon, oder? Ich meine, es sollte doch einen Unterschied machen, ob ich ein 8bit-Bitmap oder ein 24bit-Bitmap in meine Anwendung per TImageList einbinde... und so verkehrt ist ja TImageList nicht, wenn ich mehrere gleich grosse Bitmaps in meiner Anwendung verwende!?!Danke erstmal für deine Antwort
-
Hallo
Vermutlich wandelt TImage/TImageList alle Bitmaps in die höchstmögliche Qualität um, um intern sich nur mit einer Variante abgeben zu müßen. Beim Speichern in die Exe wird dann nicht wieder runtergerechnet, so das auch in der Exe immer die höchste Qualität vorhanden ist.
bis bald
akari
-
Das ist schon interessant mit TImageList: Wenn ich 1 Bitmap (Test mit einem ca. 8000Byte grossen 8bit-Bitmap) zur Designzeit hinzufüge, wird die Ziel-Anwendung ca. 113152 Byte grösser. Beim schrittweisen Hinzufügen weiterer Bitmaps derselben Grösse, wird die Ziel-Anwendung erst beim 4. Bitmap wieder grösser, dann um nochmals 225792 Byte! Bei Hinzufügen von 4 weiteren Bitmaps ändert sich die Grösse der Ziel-Anwendung dann wieder nicht.
In der Hilfe steht ja, dass alle Bilder in TImageList intern in einem grossen Bild gespeichert werden... Nachvollziehbar wäre für mich, wenn die ImageList bei jedem Hinzufügen eines Bitmap grösser werden würde, da ich AllocBy auf 1 gesetzt habe.
Wie dem auch sei, ich habe jetzt die Ressourcen-Geschichte erfolgreich implementiert und es funktioniert Alles super. Nun noch eine dll daraus machen (damit nicht gleich Jeder die Anwendung einfach modifizieren kann) und dann ist gut.
Hab ich jetzt irgendwelche Nachteile durch die Verwendung der Ressource?
-
Hallo
Da die Resourcen die Dateien 1:1 in die Exe einbinden : nein.
bis bald
akari
-
Vielen Dank