Gibt es eine Möglichkeit, eine tiefe Kopie eines Canvas-Elements mit allen gezeichneten Inhalt zu erstellen?Gibt es eine Möglichkeit, das HTML5-Canvas-Element mit seinem Inhalt zu klonen?
Antwort
Eigentlich der richtige Weg, um die Leinwand Daten zu kopieren, ist die alte Leinwand auf die neue leere Leinwand zu übergeben. Probieren Sie diese Funktion aus.
function cloneCanvas(oldCanvas) {
//create a new canvas
var newCanvas = document.createElement('canvas');
var context = newCanvas.getContext('2d');
//set dimensions
newCanvas.width = oldCanvas.width;
newCanvas.height = oldCanvas.height;
//apply the old canvas to the new one
context.drawImage(oldCanvas, 0, 0);
//return the new canvas
return newCanvas;
}
Verwenden von getImageData ist für den Zugriff auf Pixeldaten, nicht zum Kopieren von Leinwänden. Das Kopieren mit dem Browser ist sehr langsam und schwer. Es sollte vermieden werden.
können Sie
context.getImageData(0, 0, context.canvas.width, context.canvas.height);
nennen, die ein Objekt Imagedata zurückkehren wird. Dies hat eine Eigenschaft mit dem Namen Daten des Typs CanvasPixelArray, die die RGB- und Transparenzwerte aller Pixel enthält. Bei diesen Werten handelt es sich nicht um Verweise auf die Arbeitsfläche, sodass sie geändert werden können, ohne die Arbeitsfläche zu beeinflussen.
Wenn Sie auch eine Kopie des Elements möchten, können Sie ein neues Canvas-Element erstellen und dann alle Attribute in das neue Canvas-Element kopieren. Danach können Sie das ImageData-Objekt mit der
-Methode auf das neue Canvas-Element zeichnen.
Finden Sie diese Antwort für weitere Details getPixel from HTML Canvas? bei der Manipulation der Pixel.
Sie können diesen Artikel mozilla nützlich finden https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Canvas_tutorial/Drawing_shapes
Guter Ort. Vielen Dank. – Castrohenge
Nicht eine sehr gute Methode zum Kopieren. Dies ist besser für die Datenspeicherung geeignet. –
- 1. Gibt es eine Möglichkeit, einen Iterator seinem Container zuzuordnen?
- 2. Gibt es eine Möglichkeit, den Inhalt eines Symlinks zu sehen?
- 3. Gibt es in Java eine Möglichkeit, ein Gebietsschema mit seinem Anzeigenamen zu erhalten?
- 4. Gibt es eine Möglichkeit, den Code eines Objekts anstelle von seinem Wert mit R zu drucken?
- 5. Gibt es eine Möglichkeit, eine vagabundierende Box zu klonen, die bereits
- 6. Gibt es eine Möglichkeit, das letzte Bower-Update zu deinstallieren?
- 7. Gibt es eine Möglichkeit, das Tomcat-Servlet-Arbeitsverzeichnis zu konfigurieren?
- 8. Gibt es eine einfache Möglichkeit, das Alphabet programmatisch zu erhalten?
- 9. Gibt es eine Möglichkeit, das vorherige Element zu targetieren?
- 10. Gibt es eine Möglichkeit, das Standardverhalten von Klammern zu überschreiben?
- 11. Gibt es eine Möglichkeit, eine Seite nicht aktualisieren zu können?
- 12. Nach einer div Größe zu seinem Inhalt
- 13. Gibt es eine Möglichkeit, das n-te Zeichen zu finden?
- 14. Gibt es eine Möglichkeit, das Listenverständnis zu durchbrechen?
- 15. Gibt es eine Möglichkeit, das aktuelle Outlook-Aktivitätsniveau zu bestimmen?
- 16. Gibt es eine Möglichkeit, das JavaScript-Attribut standardmäßig zu verwenden?
- 17. Gibt es eine Möglichkeit, das Blockieren von StringIO zu blockieren
- 18. Gibt es eine Möglichkeit, das zugrunde liegende Xaml zu extrahieren?
- 19. Gibt es eine bessere Möglichkeit, das backBarButtonItem zu verbergen?
- 20. Gibt es eine Möglichkeit, Berührungen durch das iPhone zu übertragen?
- 21. Gibt es eine Möglichkeit zu identifizieren, wenn das Telefon klingelt?
- 22. Ionic: Gibt es eine Möglichkeit, das Texteingabefeld zu vergrößern?
- 23. Gibt es eine Möglichkeit, Fenstereigenschaften zu verbergen?
- 24. Gibt es eine Möglichkeit, fest codiertes Element oder Elementsatz mithilfe von jquery in Runtime zu klonen?
- 25. Gibt es eine Möglichkeit, Formularantwort zu ignorieren?
- 26. Gibt es eine Möglichkeit, ein Repository inkrementell vom Web zu klonen?
- 27. Gibt es eine Möglichkeit, Kovarianz zu deklarieren?
- 28. Gibt es eine Möglichkeit, django.db.connection.queries zu löschen?
- 29. Gibt es eine Möglichkeit, Webkonsolenfehler zu erkennen?
- 30. Gibt es eine Möglichkeit, Datenbanktransaktionen zu beschleunigen?
+1 in der Referenz 'drawImage()', aber es ist erwähnenswert, dass der Aufruf von 'new Canvas()' nicht in allen Browsern (insbesondere Firefox) funktioniert - stattdessen sollten Sie 'document.createElement ('canvas')' 'verwenden –
@AJ. Danke, ich habe es behoben. –
ziemlich seltsamer Fehler hier: beim Laden eines Bildes und die Größe der Leinwand entsprechend anpassen und dann klonen es, es klont nur die ersten 300px (horizontal) und die ersten 150px (vertikal) (siehe http: // peter.muehlbacher. me/playground/mycelium? src = ../downloads/chess_pawn.png Konsole beim Klicken - es protokolliert die Alpha-Werte der Kopie) – Peter