2010-07-23 2 views

Antwort

87

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.

+5

+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 –

+0

@AJ. Danke, ich habe es behoben. –

+0

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

11

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

+0

Guter Ort. Vielen Dank. – Castrohenge

+2

Nicht eine sehr gute Methode zum Kopieren. Dies ist besser für die Datenspeicherung geeignet. –

Verwandte Themen