Page 1 of 2 1 2 LastLast
Results 1 to 10 of 15

Thread: Out of memory bei mehrmaliger Feinrotation

  1. #1
    IV Amateur
    Join Date
    Nov 2009
    Posts
    13

    Default Out of memory bei mehrmaliger Feinrotation

    Hallo,
    ich bekomme nach Scan eines Bildmaterials in 1200dpi nach mehrmaliger Feinrotation (meistens 0.25 bis 1 Grad) mit Sicherheit meistens einen Out-Of-Memory-Fehler.

    Ist alles auf 4.25 inkl. Plugins. 2 GB DDR-RAM sind installiert.

    Ebenfalls auf anderem Rechner mit 4 GB (3.5 GB werden genutzt) probiert und selbes Problem bekommen.

    Fakt ist, IrfanView nimmt sich pro Rotation um so mehr Speicher und irgendwann geht nix mehr...

    Ist das Ein IrfanView-Bug oder hängt's eher am Algorithmus oder frisst das bei einem derart großen Bild in A4-Größe einfach naturgemäß soviel Speicher?

    Nachdem die Meldung angezeigt wird, meinte ich, dass er mir manchmal das vorhandene Bild nicht mehr speichern wollte ("[...] nicht verarbeiten").
    Attached Thumbnails Attached Thumbnails Click image for larger version. 

Name:	outofmemory.png 
Views:	140 
Size:	6.4 KB 
ID:	1916   Click image for larger version. 

Name:	not_save.png 
Views:	142 
Size:	6.2 KB 
ID:	1917  
    Last edited by furziger; 01.12.2009 at 01:39 PM.

  2. #2
    Multiple User WeBu's Avatar
    Join Date
    Nov 2008
    Posts
    208
    Version
    IrfanView 4.25
    OS
    Win XP Pro SP2
    CPU Cores
    1

    Default

    Wieviel Pixel haben die Bilder so und welche Farbtiefe?
    Wenn Windows die Antwort ist, wie blöd war dann die Frage?
    Windows ist nicht die Antwort, sondern die Frage!
    Und Nein lautet die Antwort!

  3. #3
    IV Amateur
    Join Date
    Nov 2009
    Posts
    13

    Default

    9058 X 13636 x 1 BPP = OCR (schwarz/weiß)

  4. #4
    Multiple User WeBu's Avatar
    Join Date
    Nov 2008
    Posts
    208
    Version
    IrfanView 4.25
    OS
    Win XP Pro SP2
    CPU Cores
    1

    Default

    Quote Originally Posted by furziger View Post
    9058 X 13636 x 1 BPP = OCR (schwarz/weiß)
    Dann wundert mich nichts! Jedes Bild allein in sw bereits 15 mb und wenn das dann auch noch angezeigt werden muß, braucht eine bitmap vermutlich 480 mb im Speicher (bei 32 bit) bei einmaligem Vorhandensein. Bei rotation muss es eigentlich zweimal im Speicher sein!

    Das ist ohnehin alles recht eng, denke ich! Schilder das halt mal dem Programmierer, wenn Du willst!
    Wenn Windows die Antwort ist, wie blöd war dann die Frage?
    Windows ist nicht die Antwort, sondern die Frage!
    Und Nein lautet die Antwort!

  5. #5
    Moderator
    Join Date
    Aug 2007
    Location
    Germany
    Posts
    855
    Version
    IrfanView 4.51
    OS
    64-bit Win 10
    CPU Cores
    8

    Default

    Naja, IV hat aber keine Undo-History, sprich man kann nur den letzten Schritt rückgängig machen, daher sollten nicht für jeden Schritt neue Bilddaten im Speicher abgelegt werden.

    Allerdings hat die Feinrotation ihre Tücken: beim Drehen wird das Bild größer. Dabei wird beim wiederholten Drehen aber auch der neu hinzugefügte Bereich jedesmal erweitert. Wenn man jetzt ein Bild mit 100x100 Pixel 10 mal um 1 Grad dreht, bekommt es bei mir die Abmessungen 125x123 Pixel. Dreht man es gleich um 10 Grad, dann wird es lediglich auf 118x117 Pixel vergrößert.

    Weiterhin verliert en Bbild beim wiederholten Drehen deutlich an Schärfe! Ein Tipp wäre, sich mit Drehen und Rückgängig an den Winkel heranzutasten. Und Dazu kann man auch mit einer Kopie des Bildes arbeiten und zuerst Verkleinern oder einen Ausschnitt nehmen. Bei großen Dateien geht's dann schneller.

    Ich habe das jetzt mal mit einer Datei getestet (11 mal gedreht, einmal Rückgängig, dmait der Undo-Puffer geleert wird), dieses dann gespeichert und in einer neuen Instanz geöffnet. Im Task-Manager sehe ich bei der geladenen Datei (TIF-Format) 45.608kb, bei der gedrehten 48.904kb. Es könnte hierbei ein Memory-Leak auftreten, aber mit Gewissheit kann ich das nicht sagen.

  6. #6
    Multiple User WeBu's Avatar
    Join Date
    Nov 2008
    Posts
    208
    Version
    IrfanView 4.25
    OS
    Win XP Pro SP2
    CPU Cores
    1

    Default

    Quote Originally Posted by derniwi View Post
    Naja, IV hat aber keine Undo-History, sprich man kann nur den letzten Schritt rückgängig machen, daher sollten nicht für jeden Schritt neue Bilddaten im Speicher abgelegt werden.
    Wenn man bereits einen Undo-Schritt hat, braucht man eben den Speicher schon zweimal und selbst wenn kein Undo-Schritt existieren würde, bräuchte man bei Operationen, die im Laufe des Verarbeitens u. U. mehr Bytes schreiben müssen, als sie bereits gelesen haben (das ist beim drehen so), automatisch einen zweiten Schreibbereich, da der Lesebereich sonst überschrieben werden würde.

    Daß bei jedem Drehen Schärfe verloren geht, ist logisch. Es ist immer besser, ein Bild erst ein paar mal um wenige Grad zu drehen, die Gradzahlen addieren und dann bei zufriedenstellendem Ergebnis mit dem Original einmal mit dem Komplettwinkel zu drehen. Beispiel: nach 12 mal drehen um 2 Grad hast Du es geschafft. Dann drehst Du das Original einmal um 24 Grad.

    Speicherlecks sind ein altes Thema, aber bei solchen Mem-hungrigen Bildern erst recht. Mancher User nutzt IView für zig-tausende von Minibildern und andere wiederum nur wenige Bilder, diese aber sind Riesenmonster! Jeder hat andere Ansprüche an ein solches Programm und jedes mal kann eine andere Strategie die richtige sein, diese programmtechnisch zu erfüllen!
    Last edited by WeBu; 03.12.2009 at 08:14 PM.
    Wenn Windows die Antwort ist, wie blöd war dann die Frage?
    Windows ist nicht die Antwort, sondern die Frage!
    Und Nein lautet die Antwort!

  7. #7
    IV Amateur
    Join Date
    Nov 2009
    Posts
    13

    Default

    Quote Originally Posted by derniwi View Post
    Weiterhin verliert en Bbild beim wiederholten Drehen deutlich an Schärfe! Ein Tipp wäre, sich mit Drehen und Rückgängig an den Winkel heranzutasten.
    Habe ich meistens auch so gemacht. Nur manchmal war ich einfach zu faul, den Undo-Schritt abzuwarten und habe es dann weitergedreht, das generelle mit der (Un)Schärfe weiß ich zwar aber das war mir in dem Fall nicht so wichtig.

  8. #8
    Multiple User WeBu's Avatar
    Join Date
    Nov 2008
    Posts
    208
    Version
    IrfanView 4.25
    OS
    Win XP Pro SP2
    CPU Cores
    1

    Default

    Quote Originally Posted by furziger View Post
    Nur manchmal war ich einfach zu faul, den Undo-Schritt abzuwarten und habe es dann weitergedreht
    Du tastest Dich mit der Eingabe immer andere Winkeleingaben an Dein Erbebnis heran. Ich nicht, daher hast Du meine Vorgehensweise falsch verstanden, denn diese hat mit Undo nix zu tun.

    1. Original nehmen
    2. Strg-U (Feinrotationsdialog) mit einem kleinen Winkelschritt bestätigen und diese Bestätigung mit 1 beginnend mitzuzählen

    3. Ergebnis im Hauptfenster besehen und ggf. ...
    4. Strg-U (Feinrotationsdialog) erneut bestätigen und weiterzählen

    3. und 4. sooft wiederholen, bis das (immer unschärfer werdende) Ergebnis die richtige Position hat! Jetzt die Zählung mit dem (immer gleichen Winkelschritt) miltiplizieren und dann einmal mit diesem errechneten Winkel eine Rotation an einem "frischen" Original (Strg-R = Neuladen) durchführen! Das meinte ich.

    Im Ergebnis heißt vielleicht 12 x hintereinander die Tastenkomination Strg-U und ENTER (bei. z. B. 2 Grad), was nur wenige Sekunden kostet und dann einmal mit den herausgefundenen 24 Grad rotieren.

    Probier das mal, das geht erheblich schneller, zumindest bei kleinen Bildern!
    Wenn Windows die Antwort ist, wie blöd war dann die Frage?
    Windows ist nicht die Antwort, sondern die Frage!
    Und Nein lautet die Antwort!

  9. #9
    IV Amateur
    Join Date
    Nov 2009
    Posts
    13

    Default

    Quote Originally Posted by WeBu View Post
    3. und 4. sooft wiederholen, bis das (immer unschärfer werdende) Ergebnis die richtige Position hat!
    [...]
    Probier das mal, das geht erheblich schneller, zumindest bei kleinen Bildern!
    So hatte ich das Anfangs auch gemacht, bei kleinen Bildern geht das Herantasten sehr gut und auch schnell. Aber nimm mal eins in meiner angegeben Größe.

    Das ist nämlich gerade das Problem! Ich kann nur, sagen wir mal, maximal 2x per Strg+U Feinrotieren, danach geht nix mehr, Speicherleck. Jede Rotation, selbst bei nur 1 Bit pro Pixel dauert bei so einem großen Bild mehrere Minuten.

    Also ich rotiere 2x und danach gibt's die Out-Of-Memory Message, und meistens kann man danach das Bild noch nicht mal mehr speichern, ich nehme an, dass der Speicher von Irfanview dann so groß ist, dass kein Platz mehr für weitere Operationen ist.

    Beispiel:
    Bild (ungefähre Größe wie oben angegeben) laden, in meinem Fall ist es ein TIF mit CCITT-4-Komprimierung.
    OS: Win XP Prof, 2 GB RAM, 2000 Mhz AMD X2 3800+ EE SFF mit 2x 512 KB Cache.

    1. IrfanView starten, RAM-Verbrauch: 4.668 KiB
    2. Bild geladen, RAM: 21.796 KiB
    3. Nach STRG+U um 1 Grad in Uhrzeigerrichtung, RAM steigt auf über 600.000 KiB an und fällt dann nach kurzer IDLE-Phase auf 253.725 KiB
    4. Schritt 3 wiederholen, RAM steigt auf über 1.3 GiB an und fällt bleibt nach kurzer IDLE auf 709.180 KiB stehen und wird auch nicht mehr weniger.
    5. Bumm.... "Zu wenig RAM Speicher für Bild(er) vorhanden !"

    Schritt 4 wird also nicht sauber ausgeführt. In manchen Fällen wollte ich das Bild dann speichern, damit ich die erste Rotation wenigstens nicht nochmal machen muss. Da IrfanView allerdings zu viel Speicher allokiert hat, klappt dann selbst das Speichern nicht immer und schlägt fehlt. Neustart einzige Chance.

    Das selbe habe ich mal mit einem bereits eingescannten Dia versucht (als JPG abgelegt), welches nur so groß wie ein Ausschnitt des "großen" Bildes darstellt. Dort gibt's dieses Speicherleck auch, allerdings kann man zig-mal Rotiere, da bei jedem Vorgang "nur" 2-3 MiB mehr allokiert werden. Zu Fehlern bei 2 GB RAM (wo das OS standardmäßig nur die Hälfte nutzen sollte) kommt es da erst bei über 1000 Rotationen, also unkritisch.

  10. #10
    Moderator
    Join Date
    Aug 2007
    Location
    Germany
    Posts
    855
    Version
    IrfanView 4.51
    OS
    64-bit Win 10
    CPU Cores
    8

    Default

    Hallo,

    das Problem liegt schlicht und einfach daran, daß ein 32Bit-Programm ohne Klimmzüge erst einmal nur 2GB Ram verwenden darf. Und du sprengst durch den Undo-Puffer diesen Rahmen.

    Ich habe gerade mal ein großes Bild im Bereich deiner Abemssungen erzeugt und getestet. Dabei bekam ich genau das von dir beschriebene Problem. Ich habe zwar ein 64Bit-Windows und 4GB Ram, aber IV ist eben nur als 32Bit-Anwendung kompiliert, so daß auch 64GB Ram nichts helfen würden. Ansonsten würde auch das System auslagern, wenn dafür genug Speicher vorhanden ist, aber wie gesagt, du sprengst einfach die 2GB-Grenze.

    Versuche doch erst einmal, daß Bild zu verkleinern, so daß du dich beim Drehen schneller an den notwendigen Winkel herantasten kannst (das Drehen geht bei kleinen Bildern natürlich auch schneller). Im Endeffekt könntest du damit vielleicht sogar Zeit sparen. Das Drehen des großen Bildes (16000 x 10664 x 1BPP) um vier Grad dauerte bei mir ca. 90 Sekunden (im Hintergrund ist die Kiste noch andersweitig beschäfftigt).

    Gruß, Nils.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •