2010-09-24 1 views
9

Esiste un modo per implementare una gomma (oltre all'uso di una matita bianca?).HTML5 Gomma per canvas

Sto usando il layering, ho un'immagine sotto la tela, quindi, se la gomma dipinge di bianco, l'utente noterà poiché l'immagine in basso non è bianca.

risposta

0

impostare il colore matita per trasparente:

context.fillStyle = "rgba(255,0,0,0)"; 

in formato rgba(), l'ultimo è il canale alfa, 0 è totalmente trasparente

+1

Non funziona. Le alambicchi "matita di gomma" disegnano su rosso (il colore della matita da disegno reale). – Valentina

+0

prova a impostare il colore semplicemente come "trasparente" (http://dev.w3.org/csswg/css3-color/#transparent), o forse 'strokestyle' invece di' fillstyle' – Javier

+0

= (Nulla. Ho già provato entrambi context.strokeStyle = "rgba (0,0,0,0)"; context.fillStyle = "rgba (0,0,0,0)"; Qualche idea? – Valentina

16

Fondamentalmente, impostare globalCompositeOperation su copy e dipingere utilizzando un colore con opacità zero, ad es. "rgba(0,0,0,0)" come stavi provando.

la questione è risolta in un po 'più in dettaglio qui:

"Erasing" in html5 canvas

3
function eraser() 
{         
context.strokeStyle = "rgb(255, 255, 255)"; 
context.globalCompositeOperation = "copy"; 
context.strokeStyle = ("rgba(255,255,255,255)"); /* or */ context.fillStyle = "rgba(255,0,0,0)"; 
} 

entrambi lavorato nel mio caso!

0

Codice per gomma trasparente mediante globalCompositeOperation "destinazione-out" e "source-over"

var handleMouseMove = function (event) { 
    midPt = new createjs.Point(oldPt.x + stage.mouseX>>1, oldPt.y+stage.mouseY>>1); 

    if(curTool.type=="eraser"){ 

     var tempcanvas = document.getElementById('drawcanvas'); 
     var tempctx=tempcanvas.getContext("2d"); 
     tempctx.beginPath(); 
     tempctx.globalCompositeOperation = "destination-out"; 
     tempctx.arc(midPt.x, midPt.y, 20, 0, Math.PI * 2, false);  
     tempctx.fill(); 
     tempctx.closePath(); 
     tempctx.globalCompositeOperation = "source-over"; 
     drawingCanvas.graphics.clear(); 

     // keep updating the array for points 
     arrMidPtx.push(midPt.x); 
     arrMidPty.push(midPt.y); 
     stage.addChild(drawingCanvas); 
     stage.update(); 

    } 

ho usato easeljs qui tuttavia il codice è indipendente da esso e può essere integrato con qualsiasi JavaScript disegno tela html5 codice

+0

Puoi spiegare ulteriormente il codice per favore – utdev