[gelöst] Probleme mit Canvas/Image und Ausführung.

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: [gelöst] Probleme mit Canvas/Image und Ausführung.

Beitrag von Erwin »

Danke, Mathias.

Musste aber feststellen, dass es dabei den Alphakanal nicht mit kopiert. Egal was ich da auch einstellen mag. Also an Stelle von Durchsicht, wurde es schwarz.
Diesmal habe ich aber erfreulicherweise schon im 10, oder Elften, jedenfalls waren es diesmal in Delphi-Forum nicht viele Threads, wo ich herum suchen musste, um die Lösung zu finden:

Code: Alles auswählen

 
ImageList.GetBitmap(BildNummerVariable, Image.Picture.PNG);
 

In dem Thread stand zwar 'Image.Picture.Bitmap', da ich aber ja mit PNG-Bilder arbeite, erscheint mir PNG sinnvoller. Hm... anderseits heißt der Befehl aber GetBitmap und nicht GetPNG? Ok, in dem Fall wäre es von Vorteil zu wissen, ob das generell für alle 3 Formate gilt ... aber anderseits;
Es funktioniert jedenfalls ganz wunderbar. Die Ziel-Image muss nicht mal auf Transparent eingestellt werden. Und (somit) auch nicht nach dem Laden des Bildes zuvor.
Allerdings kann man mit dem Befehl halt nicht festlegen, wo im Image das Bild aus der ImageList eingefügt werden soll. Aber das brauche ich in dem Fall nicht.

Nebenbei habe ich sogar erfahren, dass diese Bilder dann bereits im Programm sind, also nicht nachgeladen werden. Sehr gut.
Mehr Platz dürfte diese Variante auch nicht einnehmen.
Lazarus 2.2.0 / FP 3.2.4

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: [gelöst] Probleme mit Canvas/Image und Ausführung.

Beitrag von Erwin »

Bin mir nicht zu 100 % sicher, aber das was ich bis jetzt zu ImageList gefunden habe, sagt mir zu über 90 %, dass die Bilder, die in die ImageList eingetragen werden, in das Bitmap (BMP) Format umgewandelt wird.
Demnach ist dann doch sehr wahrscheinlich der andere Befehlt, der richtige(re):

Code: Alles auswählen

 
ImageList.GetBitmap(BildNummerVariable, Image.Picture.Bitmap);
 

Die Bilder werden dann also gleich um das 10 Fache größer?

Dann ist das nichts für mich. Den Fehler, überhaupt nicht auf die Größe von Bildern und Anzahl der Komponenten zu achten, will ich nicht noch mal machen.
Trotzdem, danke Mathias.
Früher oder später hätte ich mich bestimmt mit der ImageList eh genauer befasst. Jetzt weiß ich bereits, dass das nichts für mich ist. 10 Fach größere Bilder? Nein!
Lazarus 2.2.0 / FP 3.2.4

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: [gelöst] Probleme mit Canvas/Image und Ausführung.

Beitrag von Mathias »

Also an Stelle von Durchsicht, wurde es schwarz.
Bei ist es schön transparent.
Im Anhang mein Muster, inklusive der PNGs.
Dateianhänge
ImageList.tar.bz2
(3.89 KiB) 72-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: [gelöst] Probleme mit Canvas/Image und Ausführung.

Beitrag von Mathias »

aber das was ich bis jetzt zu ImageList gefunden habe, sagt mir zu über 90 %, dass die Bilder, die in die ImageList eingetragen werden, in das Bitmap (BMP) Format

Es ist nicht direkt BMP, sondern als normale Bitmap. Aber 10x grösser sollte sie aber nicht werden. Ich denke, du hast ein Fehler in Image, evtl. auf stretch gestellt.
Aber versuche mal mein Beispiel oben, da werden die Bilder direkt von der ImageList auf den Canvas des Forms gezeichnet.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: [gelöst] Probleme mit Canvas/Image und Ausführung.

Beitrag von Erwin »

Mathias hat geschrieben:Es ist nicht direkt BMP, sondern als normale Bitmap. Aber 10x grösser sollte sie aber nicht werden. Ich denke, du hast ein Fehler in Image, evtl. auf stretch gestellt.
Aber versuche mal mein Beispiel oben, da werden die Bilder direkt von der ImageList auf den Canvas des Forms gezeichnet.

Hat also nichts direkt mit BMP zu tun? Das würde erklären, wieso meins zum testen Abgespeichertes Bild keinen Alphakanal mehr hat, sondern alles Schwarz wurde. In dem Fall weiß ich auch nicht, um wie vieles es größer wird. Die Namensähnlichkeit finde ich aber verwirrend. ... obwohl, anderseits können die nichts dafür. Genau so wenig wie Engländer und Co. nichts dafür können, dass sie mehre Windows (Fenster) in der Wohnung haben.

Ok, danke. Dann werde ich selber mal sehen, um wie viel durch die Bilder die Ausführbare Datei größer wird.

Ach ja, das meinige funktioniert auch wunderbar mit der Transparent (bzw. Beide (PNG und Bitmap)). Wird aber eben, so weit ich herausgefunden habe, in der ImageList in Bitmap umgewandelt.
Lazarus 2.2.0 / FP 3.2.4

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: [gelöst] Probleme mit Canvas/Image und Ausführung.

Beitrag von Mathias »

Es wird alles in Bitmap umgewandelt. Wen du LoadFromFile oder SafeToFile machst, wirst du festellen, das bei einer TBitmap nur BMP geht und bei TPicture alles mögliche. Jetzt verstehe ich dich, du meinst mit 10x der Speicherverbrauch und nicht die anzahl Pixel.
Ja, die Exe wird grösser, als einzelne PNGs.
Was noch eine Möglichkeit ist, die PNGs als Resource einzubinden, aber dies ist komplizierter.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: [gelöst] Probleme mit Canvas/Image und Ausführung.

Beitrag von m.fuchs »

Erwin hat geschrieben:
m.fuchs hat geschrieben:Heißt übersetzt: du willst programmieren, aber nicht verstehen wie das geht.

Ich will das Auto fahren, aber wüsste nicht, wozu ich unbedingt wissen muss, wieso es fährt?

Falsche Analogie. Du willst nicht ein Auto fahren, du willst eins entwerfen und produzieren. Ohne die Funktionsweise eines Motos zu verstehen kommst du da nicht weit.

Erwin hat geschrieben:Oder weißt Du, wie Dein Kühlschrank geht? Dein Ofen? Deine Heizung?

Klar. Du nicht?

Erwin hat geschrieben:Du meinst wohl, weil Du Fragen Beantwortest, kann im Falle eines Missverständnis nie der Lehrer einen Fehler gemacht haben.

Klar mache ich auch Fehler, aber ich halte es da mit der alten Weisheit: Wenn dir einer sagt, dass du ein Esel bist - lache ihn aus. Sagen es dir viele - schau dich nach einer saftigen Wiese um.

Erwin hat geschrieben:
m.fuchs hat geschrieben:
Erwin hat geschrieben: Lazarus ist ein Sprache für Datenbanken.

Und wieder einmal gefährliches Nichtwissen. Wie kommst du darauf?

Delphi behauptet dies selber von sich.

Nein.

Erwin hat geschrieben:Und Lazarus behauptet, so weit ich weiß, dass sie das Gegenstück zu Delphi ist, aber eben Free und Open.

Nein.

Erwin hat geschrieben:All dies und auch die Fragen, die hier gestellt werden, spricht teils schon für sich, dass Lazarus für Spiele nicht geeignet ist.

http://wiki.freepascal.org/Lazarus-_Gam ... rs_Edition
http://wiki.freepascal.org/Castle_Game_Engine
http://wiki.freepascal.org/FPC_and_Allegro
http://wiki.freepascal.org/ZenGL

Erwin hat geschrieben:Hilfsbereitschaft? Mag sein. Aber was nützt einem diese, wenn man ständig aneinander vorbei schreibt. Da kann dann weniger Hilfsbereitschaft insgesamt besser sein, wenn man
sich dafür gut versteht, und somit einem wirklich geholfen wird.

Dir wird nicht geholfen werden, weil du dir nicht helfen lassen willst bzw. unmögliches forderst. Spieleentwicklung ist echt eine hohe Kunst, wenn es um ein resourcenfressendes Spiel geht (und das muss es nach deinen Aussagen ja sein) kommt man nicht an Game- oder Grafikengines vorbei. Da sind dann Dinge wie OpenGL und ähnliches die man einsetzt. Und natürlich auch beherrschen möchte. Wenn du da als blutiger Anfänger Einsteigerfragen stellst, dich nicht mit Hintergrundwissen beschäftigen möchtest, dann wird sich niemand die Mühe machen dich an die Hand zu nehmen und durch deine Probleme zu leiten. Das kann einfach niemand leisten.

Aber man soll Reisende nicht aufhalten. Mein Tipp wäre vielleicht: probier es doch mit einer Gameengine aus, die direkt und ausschließlich für Spieleentwicklung da ist. Godot könnte da hilfreich sein, kostet auch nix.


Erwin hat geschrieben:
m.fuchs hat geschrieben:Was sind Resourcen? RAM-Belegung, Dateigröße, Prozessorauslastung, Laufzeit?

Du machst es wieder! Du willst mich nicht verstehen. So groß ist der Unterschied zwischen den Einzelnen Dingen nicht.

Äh doch, ist es.

Erwin hat geschrieben:Das kann man doch einfach zusammen fassen, und sagen, insgesamt wird der Rechner dann ca. X % langsamer sein.

Bitte versteh doch, es gibt keinen allgemeinen Geschwindigkeitsindex eines Rechners. Auch wenn dir Windows etwas in der Art vorgaukelt. Es sind immer Kompromisse zwischen verschiedenen Belastungszenarien. Das 3D-Spiel ist zu langsam? Kein Problem wir rendern einen Großteil der Daten vor und liefern das mit aus. Hm Mist, nun belegen die Daten 500 GiB Festplattenspeicher. Wie liefern wir das aus?

Auf den Rest von deiner Nachricht möchte ich nicht eingehen, hab ja auch keine Lust mich irgendwann darüber noch zu ärgern.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten