Autor Beitrag
Dusty
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62

Windows XP
Delphi 5 Enterprise
BeitragVerfasst: Sa 01.11.03 18:15 
Ich lade JPEG-Bilder, die von einer Digitalkamera mit 5 Mio Pixel erstellt worden sind. Damit Bildschirmanzeige und Ausdruck in vertretbarer Zeit abgewickelt werden, wird das JPEG-Bild Scaliert (zB jsHalfSize) und nur grau dargestellt (GreyScale). Mich würde nun interessieren, ob ich die Größe des Bildes berechnen kann, ohne dieses Bild vorher in eine Datei schreiben zu müssen. Bislang kann ich nur Width und Height abfragen, um eine Größenordnung zu erhalten.
Andreas Pfau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Sa 01.11.03 23:24 
Hallo,

geh' auf Wotsit.org, suche nach JPEG, und schau dir an, wo in der Datei der Header ist, der die Größe enthält. Dann musst du mit 'nem Stream nur so viel lesen (ein paar Byte), dass du die Größe hast.

_________________
Life is a bad adventure, but the graphic is really good!
Dusty Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62

Windows XP
Delphi 5 Enterprise
BeitragVerfasst: So 02.11.03 16:32 
Es war ja gerade die Frage, wie ich die Größe ermittle, *ohne* eine Datei zu erzeugen. Also TImage.Picture.Graphic.Loadfromfile(JPEG-Datei, aber nur in Graustufen und nur halb so gross wie die Datei). Wie gross ist TImage.Picture.Graphic nun im Speicher? Ich habe die Images mal an den angehaltenen Drucker geschickt und geschaut, wie groß die Druckaufträge sind. Größe 100% + Farbe = 29 MB. Größe 50% + Graustufen = 2,4 MB.

Bitte beißt Euch nicht fest an dem Problem, es ist nicht so wichtig, es sei denn jemand hat die Lösung gerade mal parat. Ich dachte, man könnte es irgendwie mal schnell berechnen, so in der Art size = width * height * farbtiefe, was aber wohl nicht der Fall ist.
Andreas Pfau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Mo 03.11.03 17:29 
Hallo,

ich dachte, du willst die Maße in Pixel vom JPEG wissen - aber du meinst den Arbeitsspeicherbedarf.

Nur habe ich da keine Ahnung... innen MemoryStream schreiben, da muss man keine Datei erzeugen, aber du belegst immerhin RAM damit...

_________________
Life is a bad adventure, but the graphic is really good!
Brueggendiek
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 304

Win 98, Win98SE, Win XP Home
D5 Std
BeitragVerfasst: Di 04.11.03 00:06 
Hallo Dusty!

Da komme ich irgendwie nicht mit - sind die Bilder noch im RAM der Kamera oder schon auf dem Speichermedium darin? Oder kommt das Ganze aus dem Intenet?

Wenn die Daten auf dem Speicher der Kamara sind, wird das Ganze doch normalerweise wie ein Wechselplatten-Laufwerk angesprochen. Das ist wie eine Diskette oder ein CD-ROM und enthält ein Dateisystem, also Dateien.
Mittels "FileSize" oder dem Record bei "FindFirst / FindNext" kann man die Dateigröße ermitteln. Es ist dabei nicht nötig, die Dateien von der Kamera (oder dem Kartenleser) auf die Festplatte zu übertragen.

Gruß

Dietmar Brüggendiek
Dusty Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62

Windows XP
Delphi 5 Enterprise
BeitragVerfasst: Di 04.11.03 13:52 
Die Dateien werden als JPEG von der Kamera in das TImage geladen. Aber dort schon mit jsHalf (halbe Größe) und fsGreyScale (nur Graustufen). Durch diese beiden Einstellungen wird das Bild schon ungemein kleiner. Was mich interessiert hat, ist um *wie viel* das Bild kleiner wird. Allein durch GreyScale wird es etwa 70% kleiner, d. h. wenn ich das Bild zum Drucker schicke, wird der Druckauftrag um 70% kleiner, somit schneller. Das Bild wird nur gedruckt und nicht (zurück-) gespeichert. Also ein Programm, was Kamera-Bilder druckt, der Anwender soll anhand der Programm-Einstellungen (Größe des Bildes fsFull/fsHalf/fsQuarter/fsEights, das ganze in Farbe oder GreyScale) über den Speicherbedarf informiert werden. Den QuellCode habe ich gerade nicht parat, weil ich am falschen PC sitze.
Niels_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 117



BeitragVerfasst: Mo 17.11.03 16:42 
Titel: Größe für Bilder
Du kannst leider nicht so eine Höhe*Breite*Farbtiefe nehmen. Jedes Bild füllt verschieden viel. Ein komplett weißes Bild füllt deutlich weniger als ein Foto-Bild. Genauso kannst du nicht sagen, um wieviel mal das Bild kleiner wird, da eigentlich ein "komplett" neues Bild erstellt wird (mit neuen Pixeln), und dadurch wieder verschieden groß wird.

Könnte man das bild nicht in ne Variable schmeißen und dann herausfinden, wie viel diese füllt? (hab nicht soviel Wissen, was das Gebiet angeht)
Dusty Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62

Windows XP
Delphi 5 Enterprise
BeitragVerfasst: Mi 19.11.03 18:10 
Der Denkansatz mit der Variable ist gut. Ich habe das Problem aber erstmal zurückgestellt. Trotzdem Danke für Dein Engagement. Vielleicht stößt ja nochmal jemand, der weiß, wie es geht, auf diesen Forenbeitrag :-)