Undo / Redo -system für Paintprogramme

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Undo / Redo -system für Paintprogramme

    Also die Überschrift verrratet meine Frage glaub ich gans gut!!!
    Meine Idee war jeden Schritt den der User macht auf eine eigene Surface zu malen(funktioniert :D )
    Dann wollte ich mit einer For schleife jede einzelen drawen aber nach 20 (ebenen/surfaces) ungefähr schrauben sich die fps auf 40 von 700 runter!!!
    also hab ich mir überlegt das ich einfach alle dreisig steps alle surfaces auf eine zeichne und diese dan drawe!!!
    Dies ist meine derzeitige Lösung :S


    Gibts bessere methoden, denn die fps gehn dann nach 120 ebenen/surfaces auch runter und gelegtlich ruckelts für 5sekunden stark :thumbdown:

    help needed
  • RE: Undo / Redo -system für Paintprogramme

    whiterock schrieb:


    also hab ich mir überlegt das ich einfach alle dreisig steps alle surfaces auf eine zeichne und diese dan drawe!!!


    Du machst jeden Step ein neues Surfaces oder was?


    Machs doch einfach so:
    Du speicherst den einfach jeden Step die Maus Position dann verbindest du einfach die Punkte. Dann ist es auch ganz einnfach ein paar Schritte rückgänog zu machen.
    maxda
  • Vll. kannste uns noch sagen wie genau du zeichnest... wenn du wirklich jeden Step die Mauskoordinaten abfragst und dann einfach nen Punkt malst dann wird das nen bisschen schwierig o.o

    Du könntest den Speicherverbrauch minimieren wenn du deine Undo-History auf sagen wir 5 begrenzt, d.h. du hälst eben nur 5 Surfaces im Speicher.
    Undo- und Redo-History kannste dann über nen Ringpuffer mit entsprechendem "Einfüge-Zeiger" realisieren. Aber ich denk mal das hast du schon :x

    Andere Möglichkeit wäre es immer nur einen Bildausschnitt zu speichern anstatt immer die komplette Zeichenebene. Bekommt man ja ganz einfach raus indem jede Mausbewegung in ein Rechteck gepasst wird welches durch den Punkt links/oben und den Punkt rechts/unten der gemalten Figur beschrieben wird. Undo/Redo History bleibt gleich wie bei den Surfaces.

    Wenn du nur Linien zeichnest isses aber sicher am einfachsten wenn dus so machst wie maxda gesagt hat, History würd ich trotzdem begrenzen, da du irgendwann statt Speicher Rechenzeit verbrätst für die ständigen Bresenham-Anwendungen und sonstige Interpolationen die der GM beim Linien zeichnen macht.
  • Also ich hab 5 Zeichenfunktion (stift (direkt auf die surface bei den anderen erst beim loslassen) ; linie; ellipse; kreis; rechteck)
    und eine neue surface wird nur nach dem loslassen der maus gemacht!

    wenn man dann rückgängig drückt wird einfach jede surface ausser die letzte gezeichnet (bzw. vorletzte; vorvorletzte je nach dem wie oft man klickt)
    und bei wieder holen wird dann wieder eine mehr gedrawt!!!

    soweit noch Informationen auszuhändigen?
  • Benutzer online 2

    2 Besucher