HTML5 - Canvas | Save und Restore

Danielku15

Erfahrenes Mitglied
Hallo Miteinander.
Ich setze mich in meinem aktuellen Projekt mit HTML5 und dem Canvas Element auseinander. Ich glaube ich habe ein Verständnisproblem mit der Save/Restore Funktionalität. Mein Ziel ist folgendes:
Ich zeichne eine komplexe Grafik in mein Canvas und speichere diese Grafik mit Save(). Danach zeichne ich einen simplen Overlay auf diese Grafik um einige Elemente zu markieren. In einem gewissen Intervall werden diese Overlays aktualisiert. Dazu stelle ich den alten Zustand mit Restore() wiederher, speichere in erneut auf den Stack Save() und zeichne den Overlay neu. Seltsamerweise wird aber der mit Save() gespeicherte Zustand nicht wiederhergestellt. Das Coding ist jenes:


Javascript:
net.coderline.jsgs.tablature.Tablature.prototype.OnPaint = function() {
    if(this.Track == null) { // invalid data
        // paint info message
        this.PaintBackground();
        var text = this.ErrorMessage;
        this.Canvas.setFillStyle("#4e4e4e");
        this.Canvas.setFont("20px Arial");
        this.Canvas.setTextBaseline("middle");
        this.Canvas.fillText(text,20,30);
        return;
    }
    else if(this.UpdateDisplay) { // complex update
        // paint complex graphics
        this.PaintBackground();
        var displayRect = new net.coderline.jsgs.model.Rectangle(0,0,this.Width,this.Height);
        this.ViewLayout.PaintCache(this.Canvas,displayRect,0,0);
        // save state of complex graphics 
        this.Canvas.save();
        this.UpdateDisplay = false;
    }
    else { // overlay update
        // restore complex graphics
        this.Canvas.restore();
        // and save it for next restore
        this.Canvas.save();
    }
    
    // paint overlay
    this.PaintCaret();
}

Hab ich diese save/restore Mechanismen falsch verstanden, oder habe ich einfach nur etwas vergessen?

Ich hab die Mechanismen wirklich falsch verstanden. Ich hab mir nochmals einige Dokus im Detail durchgelesen und habe herausgefunden dass lediglich Zeicheninformationen wie fillStyle, strokeStyle, lineWidth und lineJoin mit diesem save/store Mechanismus gespeichert werden. Für meinen Fall als Bild-Buffer werde ich die beiden Funktionen getImageData und putImageData verwenden müssen.

Grüße Daniel
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück