![]() |
image ständig speichern um undo und Redo zu ermöglichen ?
Hallo
wie speichere ich mein Image beim zeichnen, damit ich ein paar Schritte vorwärts oder Rückwärts beim Fehler machen kann ? Wie kann man Programm wissen ob was auf Image neu gezeichnet wurde damit es sie speichert ? : ( oder muss ich jedes mal die Image beim MouseUp speichern ? |
Re: image ständig speichern um undo und Redo zu ermöglichen
Zitat:
|
Re: image ständig speichern um undo und Redo zu ermöglichen
Ich weiß nicht welches is besser aber wie ich sehe, bis zum letzten OnMouseUp
Ich möchte zum Beispiel für den Anwender nur 3 oder 4 Schritte zurück ermöglichen. Es sollte ausreichen sein |
Re: image ständig speichern um undo und Redo zu ermöglichen
HI,
du könntest dein Bitmap jedes Mal als KOPIE in ein anderes Bitmap eines selbstsortierenden Arrays speichern. Ab gewissen Größen solltest du vllt. Probleme bekommen, wenn du 10 Schritte rückgängig machen willst und dein Bild 20 MPixel groß ist. Da könnte es dann schon zu einer erhöhten Speichernutzung kommen. Was du aber auch machen kannst ist, dass du das ursprüngliche Bild speicherst und bei jedem Zeichnen alle Änderungen draufzeichnest, sodass du alle Änderungen bis zum letzten Speichern rückgängig machen kannst. Bernhard |
Re: image ständig speichern um undo und Redo zu ermöglichen
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 ;) |
Re: image ständig speichern um undo und Redo zu ermöglichen
Es hat geklappt mit array
Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz