Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zu Große EXE-Datei (https://www.delphipraxis.net/71090-zu-grosse-exe-datei.html)

hille 8. Jun 2006 18:05


Zu Große EXE-Datei
 
Hi,

mein Problem:
Ich programmiere gerade ein ganz einfaches Spiel. Im Moment benutze ich noch bmp- Datein, welche ich durch DELPHIX-Komponenten in das Programm einbinde.
Dabei wird aber die Exe-Datei, jetzt schon 5 MB richtig groß (Ich habe noch nicht mal
20% von meinem Programm geschrieben bzw. Bilder gemalt!!!).

So, gibt es eine Möglichkeit, das die EXE-Datei, auf andere Dateien zugreift (z.B. wo die Bilder sind, die Dialoge, die Units oder so) und somit diese EXE nicht so groß wird???

Hoffe ihr könnt mir helfen.

Hille

mkinzler 8. Jun 2006 18:11

Re: Zu Große EXE-Datei
 
Du kannst aus einer exedatei problemlos auf andere Dateien zugreifen. Wie hast du die Bilder in die Exe eingebunden?

hille 8. Jun 2006 18:15

Re: Zu Große EXE-Datei
 
Also im Moment nur durch TImage. Aber ich will die Bilder bald durch DXDraw usw. darstellen lassen.

Hille

himitsu 8. Jun 2006 18:17

Re: Zu Große EXE-Datei
 
BitMap's sind unkomprimierte Bilder ... versuch mal auf JPegs, GIFs, oder ähnliches umzusteigen.

Notfalls diese Bilder dann direkt in den Programmresourcen, oder halt extern zu speichern (Tipp: viele Komponenten kennen sowas wie LoadFromFile), da einge der StandardDelphiKomonenten intern nur als BitMap speichern, egal in welchem Format man die bilder reingeladen hat.
Und dann halt erst beim Programmstart in die gewünschte Komponente reinladen.

hille 8. Jun 2006 18:20

Re: Zu Große EXE-Datei
 
Ja, das kann das Problem lösen! Logisch! Ich habe nämlich die Bilder schon eingefügt.
Ich Depp. Jo Danke!

Ach ja. Wegen JPEG´s und GIF´s: da wird der Hintergrund nicht Transparent gemacht, auch wenn ich Transparent auf true setze.

Hille

semo 8. Jun 2006 18:25

Re: Zu Große EXE-Datei
 
du kannst die bitmaps in eine resourcedatei (*.res file) auslagern,
deise resourcedatei wird beim kompilieren mit in die exe eingebunden.
Damit dürfte deine exe wesentlich kleiner sein.

Damit du die Bitmaps laden kannst verwendest du die TBitmap.LoadFromResourceName Methode.
Um eine Resourcedatei zu erzeugen gibts bei den Tools in Delphi einen Bildeditor...

edit: zu den unkomprimierten Bildern kann man entgegnen: setz die Farbtiefe der Bitmaps herunter, diese verbrauchen damit wesentlich weniger Speicher. Dabei musst du dann aber auf die Qualität der Bitmaps achten.

hille 8. Jun 2006 18:32

Re: Zu Große EXE-Datei
 
Ah, dazu ist der Befehl gut. Jo danke. Ich schau mir das gleich mal an.
Vielen Dank.

Hille

Cyberbob 8. Jun 2006 19:25

Re: Zu Große EXE-Datei
 
Wenn die Bilder als jpg gespeichert werden, muss die Unit JPEG mitgeladen werden. Dadurch wird das Programm wieder grösser, das macht also nur Sinn, wenn man viele Bilder hat. Bei 2 oder 3 kleinen Bildern erreicht man eher das gegenteil.

Luckie 8. Jun 2006 22:06

Re: Zu Große EXE-Datei
 
Zitat:

Zitat von computer-glossar.de
du kannst die bitmaps in eine resourcedatei (*.res file) auslagern,
deise resourcedatei wird beim kompilieren mit in die exe eingebunden.
Damit dürfte deine exe wesentlich kleiner sein.

Die Logik erklär mir mal. Wenn sie jetzt schon fest mit den TImage-Komponenten verknüoft sind, dann sind sie ja in der Exe als Ressource drinne. Warum sollte die Exe bei deiner Methode kleiner werden.

Alternativ kann man sie auch als Ressourcen in eine DLL packen, wenn man sie zusammen haben will.

Olli 8. Jun 2006 23:56

Re: Zu Große EXE-Datei
 
Für Transparenz bei verlustfreier Kompression kann ich nur PNG empfehlen ;)

Im Falle von Animationen nehme man MNG.

Boombuler 9. Jun 2006 07:06

Re: Zu Große EXE-Datei
 
PS:
Es gibt auch die Möglichkeit die Resourcen in eine DLL zu kompilieren statt in eine Exe und die Bilder dann darüber zu laden. Aber Tatsache ist: Die Bilder müssen nun mal irgendwie bei deinem Programm bei sein die Frage ist nur wie und wo ;)

Du kannst das natürlich auch kombinieren sprich: Kompression (z.B. JPEG) und ResourceDLL...

Greetz
Boombuler

Ach ja @ Luckie:
Wenn du die Bilder im TImage hast werden die mit in der DFM als Text gespeichert und das als Hex-String: Wenn du das allerdings in eine Resource Datei kompilierst werden die meines Wissens nicht als Hex-Strings sondern Binär gespeichert! Das bringt sicherlich nicht das Meiste ist aber ein Größenunterschied :wink:

Olli 9. Jun 2006 10:09

Re: Zu Große EXE-Datei
 
Zitat:

Zitat von Boombuler
Ach ja @ Luckie:
Wenn du die Bilder im TImage hast werden die mit in der DFM als Text gespeichert und das als Hex-String: Wenn du das allerdings in eine Resource Datei kompilierst werden die meines Wissens nicht als Hex-Strings sondern Binär gespeichert! Das bringt sicherlich nicht das Meiste ist aber ein Größenunterschied :wink:

Nimmst du dich eigentlich selber ernst?

Daß die DFM dir als Benutzer als Text (und bider damit als "Hex-Strings") angezeigt wird, mag sein. Daß sie in der EXE danach auch noch als "Hex-Strings" stehen ist totaler Quark. Sie sind natürlich genau wie in einer Ressource als "Binärdaten" (nämlich so wie sie eingebunden wurden) enthalten ...

Boombuler 9. Jun 2006 13:30

Re: Zu Große EXE-Datei
 
Zitat:

Zitat von Olli
Zitat:

Zitat von Boombuler
Ach ja @ Luckie:
Wenn du die Bilder im TImage hast werden die mit in der DFM als Text gespeichert und das als Hex-String: Wenn du das allerdings in eine Resource Datei kompilierst werden die meines Wissens nicht als Hex-Strings sondern Binär gespeichert! Das bringt sicherlich nicht das Meiste ist aber ein Größenunterschied :wink:

Nimmst du dich eigentlich selber ernst?

Daß die DFM dir als Benutzer als Text (und bider damit als "Hex-Strings") angezeigt wird, mag sein. Daß sie in der EXE danach auch noch als "Hex-Strings" stehen ist totaler Quark. Sie sind natürlich genau wie in einer Ressource als "Binärdaten" (nämlich so wie sie eingebunden wurden) enthalten ...

Olli nimm dir mal Reshacker und ne mit Delphi compilierte exe... zumindest ich kann bei mir immer die kompletten DFMs sehen, und dort sind auch die Bilder drin die du in ein TImage auf der Form hast!

(Merke: Ich will nich das das hier zu nem riesen Streit ausartet!!! Aber wenn ich das Richtig sehe werden so auch alle Forms erstellt die mit VCL geschrieben sind:
Erzeuge einen TReader -> gebe ihm die DFM aus der Resource der Exe und lass ihn die Forms erstellen

Kann auch sein das wir aneinander vorbeireden! Aber ich habs nu gerad noch mal mit Delphi und ResHacker ausprobiert!!!)

Greetz
Boombuler

Beispiel:
Code:
object Form1: TForm1
  Left = 235
  Top = 151
  Width = 870
  Height = 640
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Image1: TImage
    Left = 120
    Top = 80
    Width = 105
    Height = 105
    Picture.Data = { 
      0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000006E00
      0000410403000000C28F8C2B0000000F504C544500FF0000FD009B9B9BFFFFFF
      000000159119840000009A4944415478DAED93C10D80200C455B27D00D58C115
      DC3F8C206E002CA0224A15628CF626F00F3FB4E45D7E5B049E307F0EDB502C06
      BACD7C4FEFE6D4A51FC5709A72AA5CCCF9509FF30C2A8ABB8BEDE51C32E6CEFB
      034AF658BB1060791C4B05708DF84C8D9EEBC1B40BEE66C5DCC024664BA54D7B
      CE64E532E098FBF2977BE072EC3B1A40C5992B1ACB391B757DC9CA65C031F7E5
      2FF7C0D20A7A89A160F44052BD0000000049454E44AE426082}
  end
end

NicoDE 9. Jun 2006 13:43

Re: Zu Große EXE-Datei
 
Zitat:

Zitat von Boombuler
Olli nimm dir mal Reshacker und ne mit Delphi compilierte exe...

Nimm dir mal einen Hex-Editor und suche nach dem Text den der ResHacker anzeigt (es wird darauf hinauslaufen, dass der ResHacker die binäre Ressource ins Textformat konvertiert).

hitzi 9. Jun 2006 13:51

Re: Zu Große EXE-Datei
 
Es kann aber trotzdem evt. kleiner werden. Wenn man mit TImage gearbeitet hat, kann es schon passieren, dass man ein und das selbe Bild zweimal nutzt und es dafür in zwei oder mehr TImages über die IDE lädt. Schon ist ein und selbe Bild mehrmals in der EXE vorhanden. Wenn dies der Fall ist, kann man durch die Nutzung von Ressourcen die mehrfach vorhandenen Bilder auf ein einziges Vorkommen in der EXE einschränken. Dadurch kann Größe gespart werden :)

hille 9. Jun 2006 15:16

Re: Zu Große EXE-Datei
 
Ahha, nur wie kann ich eine Bild Datei (jpeg, png(braucht man da noch eine Unit?) oder bmp) in eine DLL Datei Laden?
Ich dachte immer das DLL Dateien immer 3D-Modelle beinhalten?

Hille

Olli 9. Jun 2006 15:43

Re: Zu Große EXE-Datei
 
Zitat:

Zitat von Boombuler
Olli nimm dir mal Reshacker und ne mit Delphi compilierte exe... zumindest ich kann bei mir immer die kompletten DFMs sehen, und dort sind auch die Bilder drin die du in ein TImage auf der Form hast!

Ich geb's auf ... heute sind einfach zuviele Leute die Probleme haben Daten und deren Repräsentation auseinanderzuhalten :wall: :wall: :wall:

Zitat:

Zitat von hitzi
Es kann aber trotzdem evt. kleiner werden. Wenn man mit TImage gearbeitet hat, kann es schon passieren, dass man ein und das selbe Bild zweimal nutzt und es dafür in zwei oder mehr TImages über die IDE lädt. Schon ist ein und selbe Bild mehrmals in der EXE vorhanden. Wenn dies der Fall ist, kann man durch die Nutzung von Ressourcen die mehrfach vorhandenen Bilder auf ein einziges Vorkommen in der EXE einschränken. Dadurch kann Größe gespart werden :)

Das stimmt allerdings. Guter Einwand!

Zitat:

Zitat von hille
Ahha, nur wie kann ich eine Bild Datei (jpeg, png(braucht man da noch eine Unit?) oder bmp) in eine DLL Datei Laden?
Ich dachte immer das DLL Dateien immer 3D-Modelle beinhalten?

DLLs können alles mögliche beinhalten: Daten, Code, exportierte Funktionen, Objekte und Variablen, Ressourcen ... oder einen Mix aus alledem.

hille 10. Jun 2006 11:03

Re: Zu Große EXE-Datei
 
Ah, und wie kann ich jetzt dort die bilder reinladen?
Geht das über Datei/Neu/DLL ? Habe mich damit nämlich noch nicht beschäftigt.

Hille

Olli 10. Jun 2006 12:06

Re: Zu Große EXE-Datei
 
In die DLL? Über ein Ressourcen-Script (.RC), welches man über den Ressourcen-Compiler jagt und eine Ressourcen-Datei (.RES) rausbekommt, die man per {$R Datei.res} einbinden kann.

Boombuler 12. Jun 2006 08:56

Re: Zu Große EXE-Datei
 
EDIT:

So ich nehm alles zurück:
Hexeditor sagt ca Sowas:

Picture.Data
#$F9 #00#00#00
TPNGObject#$89#$50[Die binären Daten]END
(was genau da steht kann ich leider net erkennen weil: HIEW = Falscher Zeichensatz)

:wall: :wall: :wall:

Ich sollte es vielleicht einsehen das Olli in 99.9% der Fälle halt doch mehr Ahnung hat ;)

Greetz
Boombuler

PS: Kleiner Erfolg: Man könnte sich die paar Bytes für "Picture.Data #$F9 #00 #00 #00 TPNGObject#$89#$50" sparen ;)

Olli 12. Jun 2006 09:29

Re: Zu Große EXE-Datei
 
Zitat:

Zitat von Boombuler
PS: Kleiner Erfolg: Man könnte sich die paar Bytes für "Picture.Data #$F9 #00 #00 #00 TPNGObject#$89#$50" sparen ;)

:lol: :mrgreen: ... wenn man so pingelig sein will :zwinker:


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