2010-08-10 9 views
3

Comment utiliser globalCompositeOperation pour effacer quelque chose?HTML5 Canvas: globalCompositeOperation (gomme)

http://canvaspaint.org/ a une gomme à effacer, mais c'est juste une ligne blanche - ok que si votre fond est blanc ...

Je sais que vous pouvez utiliser ctx.clearRect(). Mais cela n'a pas vraiment fonctionné pour moi car tout en faisant glisser une souris avec une gomme (définie sur 8x8px), elle ne fait que des carrés 8x8px non connectés - pas vraiment une ligne lisse.

Existe-t-il un moyen d'utiliser globalCompositeOperation comme une gomme?

Quelque chose comme:

ctx.globalCompositeOperation = "___something___"; 
ctx.beginPath(); 
ctx.lineTo(mouseX , mouseY); 
ctx.closePath(); 

Merci.

+0

Cela peut vous aider: http://stackoverflow.com/questions/3328906/erasing-in-html5-canvas – Castrohenge

Répondre

5

Oui, vous pouvez effacer en utilisant globalCompositeOperation as described here. Réglez-le simplement sur "copy" et utilisez par ex. strokeStyle = "rgba(0,0,0,0)" et cela va effacer la toile dans le coup.

Mise à jour: merci de souligner que cela ne fonctionne pas maintenant @ will-huang. Vous devez, comme mentionné, avoir globalCompositeOperation défini sur destination-out et strokeStyle sur rgba(0,0,0,1). (En fait, vous pouvez avoir des valeurs RVB, juste vous avez besoin de l'ensemble alpha à 1,0 pour effacer complètement le contenu de la course.)

Voici un exemple d'effacement: http://jsfiddle.net/FGcrq/1/

+1

affecte globalCompositeOperation à "copier" incapable de s'exécuter correctement dans IE9/IE10. J'ai été changé en "destination-dehors" et changez le strokeStyle en "rgba (0,0,0,1)" pour résoudre ce problème. –

0

Je ne pense pas. Mais il suffit de changer la couleur de la ligne à quelle que soit la couleur de fond. De plus, si vous voulez des tailles d'effaceur différentes, augmentez la taille de la ligne. ctx.lineWidth=//default 1.0 et ctx.strokeStyle=//default black Je suggère également d'utiliser ctx.save() et ctx.restore() de sorte que vous n'avez pas à vous soucier de réinitialiser vos attributs de ligne.

+0

http://mugtug.com/sketchpad/ a une gomme vraiment agréable, mais je ne peux pas comprendre comment ça marche. –

2
ctx.globalCompositeOperation = "destination-out"; 

Cela devrait faire l'affaire . Vous pouvez également utiliser "xor" pour effacer le bien.

+0

Je suis d'accord. context.strokeStyle = "rgba (255,255,255,0.7)"; context.globalCompositeOperation = "destination-out" est meilleur que "copy" parce que vous pouvez ajuster la gomme aux différentes forces. – Homan

Questions connexes