Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Riesiges Bild erstellen (https://www.delphipraxis.net/150438-riesiges-bild-erstellen.html)

diabox 16. Apr 2010 15:45


Riesiges Bild erstellen
 
Hallo,

ich würde gerne extrem viele Bildteile (jeweils 600 x 430 Pixel) in einem Bild zusammenfügen und dann verkleinern. Dabei stoße ich natürlich an die Grenzen meines Arbeits- und/oder Grafikspeichers.
Nach einigem Suchen bin ich mittlerweile bei der Graphics32 Bibliothek angelangt, aber auch hier erhalte ich schon bei einem Bruchteil der von mir benötigten Bildgröße eine Exception:

Delphi-Quellcode:
Karte.Bitmap.SetSize(600*700, 430*3); //700 Bilder in der Breite, 3 in der Höhe
Zitat:

Erste Gelegenheit für Exception bei $76D9B727. Exception-Klasse Exception mit Meldung 'Can't allocate the DIB handle'. Prozess nnMerge.exe (3704)
Gibt es eine Möglichkeit mit so großen Bildbereichen wie (W: 600*700, H: 430*900) zu arbeiten oder werde ich das Bild in mehrere Teile aufteilen müssen?

s.h.a.r.k 16. Apr 2010 15:47

Re: Riesiges Bild erstellen
 
Die Frage ist, was du damit vor hast ;) Wenn dein Arbeitsspeicher nicht reicht, dann musst du andere Wege finden.

Wenn du ein Spiel programmieren willst, dann hast du ja eine fest vorgegebene Größe, die du sehen kannst, mehr geht nicht. Den Rest kannst du ja nach einem Verschieben" des Bildes nachladen. Du kannst sicherlich auch schon mehr um das Bild herum puffern, nur darf es halt einfach nicht zu viel werden.

// edit

du kannst das riesen Bild zwar schon in eine Datei klatschen, wobei ich dir das nicht unbedingt empfehlen würde
benenne die Stücke des großen Bildes lieber sinnvoll und erarbeite dir einen sauberen Load-Aglorithmus, der immer einzelne Teile von der HDD lädt.

Klaus01 16. Apr 2010 15:56

Re: Riesiges Bild erstellen
 
.. warum verkleinerst Du die Bildteile nicht schon vor dem Zusammenfügen?

Grüße
Klaus

tkone 16. Apr 2010 16:04

Re: Riesiges Bild erstellen
 
für riesige datenmengen einfach den virtuellen speicher von windows vergrößern.
ich hab für ein projekt 9GB freigegeben um alle notwendigen berechnungen durchzuführen ;)

diabox 16. Apr 2010 16:06

Re: Riesiges Bild erstellen
 
Es handelt sich eigentlich um ein Kartenprogramm :D Die Bildteile sind schon vernünftig benannt (x_y.png), aber es sind nunmal sehr viele Bildteile und jetzt möchte ich möglichst schnell eine Übersichtskarte daraus erstellen :-)
Wenn ich jedes einzelne Bild verkleinere ist das Ergebnis doch hinterher bestimmt nicht so exakt wie, wenn ich die gesamte Karte in Orginalgröße verkleinere, oder lohnt sich der Aufwand?

s.h.a.r.k 16. Apr 2010 16:07

Re: Riesiges Bild erstellen
 
Auch wenn etwas OT wird: Hast dann wenigstens ein SSD-RAID? :mrgreen: Sonst dauert das ganze Ein- und Auslagern ja ewige Zeiten...

// edit

naja, überleg doch mal, was so kompression-algos machen. wenn du erst die eile verkleinerst und dann zusammenfügst bekommst du in etwas das gleiche ergebnis und sollte nicht wesentlich schlechter sein. du kannst es ja auch mal mit einer "riesen" image von 1280x1024 probieren und das auf 125x100 (geschätzt) komprimierten und dann das Ganze auch noch mit den Teilstücken machen.

tkone 16. Apr 2010 16:09

Re: Riesiges Bild erstellen
 
Zitat:

Zitat von diabox
Wenn ich jedes einzelne Bild verkleinere ist das Ergebnis doch hinterher bestimmt nicht so exakt wie, wenn ich die gesamte Karte in Orginalgröße verkleinere, oder lohnt sich der Aufwand?

theoretisch dürfte es nur kleine unterschiede an den fügestellen geben.

Medium 16. Apr 2010 16:33

Re: Riesiges Bild erstellen
 
Zitat:

Zitat von diabox
W: 600*700, H: 430*900

Macht bei 32 Bit Farbtiefe (600*700*430*900*32)/8 = 650.160.000.000 Bytes = 634.921.875 KB = 620.041 MB = 606 GB. Da kannst du noch so viel virtuellen Speicher zulassen, das ist schlicht und ergreifend um Größenordnungen VIEL zu viel.

Verkleinere die Einzelbilder, und füge diese zusammen. Wenn du dir Sorgen um die Kachelränder machst, bastel dir einen eigenen Verkleinerungs-Algo, der die Ränder der angrenzenden Kacheln in passender Dicke mit beachtet - allerdings bezweifel ich, dass man den unterschied überhaupt wirklich wahrnehmen wird. Aber 600GB temporäre Daten sind für handelsübliche PCs und diese Aufgabe fern ab von "angemessen" bzw. machbar.

Codewalker 16. Apr 2010 16:52

Re: Riesiges Bild erstellen
 
Zitat:

Zitat von Medium
Verkleinere die Einzelbilder, und füge diese zusammen. Wenn du dir Sorgen um die Kachelränder machst, bastel dir einen eigenen Verkleinerungs-Algo, der die Ränder der angrenzenden Kacheln in passender Dicke mit beachtet

Wenn der Verkleinerungsgrad mehr als 50% beträgt dürfte bei es Karten als Ausgangsmaterial (die je selten große Sprünge haben, was in der Natur der Sache liegt) auch ausreichen, statt der benachbarten Kacheln nur die eigene zu betrachten. Dann müsste man einfach die oberste Zeile noch einige Male darüber einfügen (das gleiche rechts, unten und links) und nachher wieder wegschneiden. Wenn man den Verkleinerungsgrad kennt, kann man sicher ausrechnen, wie viele Zeilen man beachten muss

Klaus01 16. Apr 2010 16:56

Re: Riesiges Bild erstellen
 
.. vielleicht kannst Du das zusammenhängen der (verkleinerten) Bilder
auch mit externen Software bewerkstelligen - stitching

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 Uhr.
Seite 1 von 2  1 2      

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