Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: image ständig speichern um undo und Redo zu ermöglichen

  Alt 9. Aug 2008, 02:32
Alternativ überlegt man sich eine Form von internem "Script", über welches alle Zeichenoperationen genau abgebildet werden können. Das kann sowas einfaches sein wie ein Record in dem aufgeführt ist "was?", "von wo?", "wo hin?", "farbe", etc. pp., halt alles was man zeichnen kann, bis hin zu einer regelrechten Sprache mit Syntax und allem Gedöns (welche dann, wenn nur intern verwendet, jedoch nicht unbedingt Klartext sein muss).
Dann muss man nur noch ein einziges Ausgangsbitmap als ganzes speichern, und von da an nur noch die deutlich kleineren Änderungs-"Scripte". Will man dann einen Schritt zurück, führt das Zeichenprogramm vom Bitmap aus einfach alle Script-Schritte weniger eins aus. Diese Methode ist zunächst einmal etwas aufwendig und will sehr gut gelpant und durchdacht sein, aber ab einer gewissen Schrittanzahl bzw. Bildgröße ist es der einzig praktikable Weg zu einer Undo/Redo Funktion. Photoshop ist da ein prima Beispiel.


Edit: Eine andere Variante die erheblich einfacher ist ist es, wenn du jeweils immer nur die Differenzbilder zu einem "ersten" Referenzbild speicherst, und diese dann z.B. mit der zLib o.ä. komprimiert ablegst. Gekniffen ist man dan nur in solchen Extremfällen, wenn in einem Schritt sehr viel Bild geändert wurde (FloodFill ohne Grenzen z.B.). Jedoch dürfte dieser Weg auch aus Sicht der Geschwindigkeit dem o.g. unterliegen, weil für jedes Undo N kleine Streams dekomprimiert und verknüpft werden. Ich würde jeder Zeit zu obigem tendieren
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat