2010-07-23 6 views

Répondre

87

En fait, la bonne façon de copier les données de la toile est de passer la vieille toile à la nouvelle toile vierge. Essayez cette fonction. L'utilisation de getImageData est pour l'accès aux données de pixels, et non pour la copie de canevas. La copie avec est très lente et dure sur le navigateur. Cela devrait être évité.

+5

+1 sur la référence 'drawImage()', mais il vaut la peine de noter que l'appel à 'new Canvas()' ne fonctionne pas dans tous les navigateurs (notamment Firefox) - vous devriez plutôt utiliser 'document.createElement ('canvas')' –

+0

@AJ. Merci, je l'ai réparé. –

+0

erreur assez étrange ici: lors du chargement d'une image et en ajustant la taille de la toile en conséquence et _then_ clonage, il ne clone que le premier 300px (horizontalement) et le premier 150px (verticalement) (voir http: //peter.muehlbacher. me/playground/mycelium? src = ../downloads/chess_pawn.png console en cliquant autour - il enregistre les valeurs alpha de la copie) – Peter

11

Vous pouvez appeler

context.getImageData(0, 0, context.canvas.width, context.canvas.height); 

qui renverra un objet ImageData. Cela a une propriété nommée data de type CanvasPixelArray qui contient les valeurs rgb et de transparence de tous les pixels. Ces valeurs ne sont pas des références à la toile et peuvent donc être modifiées sans affecter le canevas.

Si vous souhaitez également une copie de l'élément, vous pouvez créer un nouvel élément canvas, puis copier tous les attributs dans le nouvel élément canvas. Après cela, vous pouvez utiliser la méthode

context.putImageData(imageData, 0, 0); 

pour dessiner l'objet ImageData sur le nouvel élément canvas.

Voir cette réponse pour plus de détails getPixel from HTML Canvas? sur la manipulation des pixels.

Vous trouverez peut-être cet article mozilla utile aussi bien https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Canvas_tutorial/Drawing_shapes

+0

Bon point. Merci. – Castrohenge

+2

Ce n'est pas une très bonne méthode de copie. Ceci est plus adapté pour le stockage de données. –

Questions connexes