Klar, ganze, verwandelt das HTML5 Canvas-Element, während die Erhaltung Kontext transformieren
Möchte ich die zoom-und pan eine HTML5-Canvas-verwandelt den Kontext translate()
und scale()
-, clearing die Leinwand, und dann Neuzeichnen. Beachten Sie, dass ich explizit nicht aufrufen save()
und restore()
um meine Transformationen.
Wenn ich führen Sie die standard - ctx.clearRect(0,0,ctx.canvas.width,ctx.canvas.height)
dann das gesamte sichtbare Leinwand, nicht gelöscht werden; downscaling oder schwenken kann dazu führen, diese erste Rechteck nicht genau decken im Bereich der Zeichnung.
Wenn ich die Webkit-freundliche clearing-Methode...
var w=canvas.width;
canvas.width = 0;
canvas.width = w;
...dann die kumulative transformation der Kontext zurückgesetzt.
Wie kann ich am besten klar, dass das gesamte canvas-Kontext ohne Verlust meiner transformation?
Das ist eigentlich das, was ich Tue, da bin ich schon mit der Aufzeichnung der Transformation und Hinzugefügt haben, die Methode zur Transformation von Platz auf dem Bildschirm, um den canvas-Bereich, aber dies schien wie eine gute Gelegenheit, an die Probleme mit diesen beiden clearing-Methoden und sehen, ob es etwas sauberer.
InformationsquelleAutor Phrogz | 2011-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Halten Spur von alle der transformation von Informationen, wie Sie vermutlich tun wird, was mehrere andere bisher getan haben, (wie cake.js und meine eigene Bibliothek, die für zwei). Ich denke, dadurch wird so ziemlich eine Notwendigkeit für irgendeine große Leinwand-Bibliothek.
Ilmari der cake.js auch beschwerte sich bei mozilla:
https://bugzilla.mozilla.org/show_bug.cgi?id=408804
Könnten Sie stattdessen anrufen speichern/wiederherstellen, um Ihre clear-Methode:
Nicht erfüllen Ihrem Fall?
Froh, dass ich helfen konnte. Ich wollte auch sagen, danke für all Ihre Beiträge für das canvas-Thema auf S. O.
InformationsquelleAutor Simon Sarris
Für diejenigen die es interessiert, verfolgen Sie Ihre vollständigen Kontext transformiert, hier ist mein code dafür in eine on-demand-pro-Rahmen-basis. Dieser vorangestellt ist, mit der Nutzung, die zeigt, wie klar die volle Rechteck, basierend auf der transformierten Koordinaten. Sie können sehen, der code in Verwendung auf meiner website.
Genau wie die akzeptierte Antwort zeigt: speichern Sie den Kontext transformieren, setzen Sie die Transformation auf die Einheitsmatrix, klar die 0,0,Breite,Höhe und wiederherstellen der Transformation.
Ja, Sie haben Recht, ich habe nur falsch so etwas "wiederherstellen" würde nicht so funktionieren wie Sie sollen und transformedPoint kehrte der falschen Stelle nach einem restore. vielen Dank so weit.
InformationsquelleAutor Phrogz