2010-09-24 39 views
9

Có một cách để thực hiện một cục tẩy (trừ việc sử dụng bút chì màu trắng?).HTML5 Canvas eraser

Tôi đang sử dụng lớp, tôi có hình ảnh bên dưới canvas, vì vậy, nếu công cụ xóa sơn màu trắng, người dùng sẽ chú ý vì hình ảnh bên dưới không phải là màu trắng.

Trả lời

0

đặt màu bút chì để minh bạch:

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

ở định dạng rgba(), người cuối cùng là kênh alpha, 0 là hoàn toàn minh bạch

+1

Nó không hoạt động. Các 'bút chì tẩy' vẫn vẽ màu đỏ (màu của bút chì vẽ thực tế). – Valentina

+0

thử đặt màu đơn giản là "trong suốt" (http://dev.w3.org/csswg/css3-color/#transparent), hoặc có thể là "kiểu chữ" thay vì "fillstyle" – Javier

+0

= (Không có gì. Tôi đã thử cả hai context.strokeStyle = "rgba (0,0,0,0)"; và context.fillStyle = "rgba (0,0,0,0)" ;. Bất kỳ ý tưởng nào? – Valentina

16

Về cơ bản, đặt globalCompositeOperation thành copy và vẽ bằng cách sử dụng màu có độ mờ bằng không, ví dụ: "rgba(0,0,0,0)" như bạn đang thử.

Câu hỏi đặt ra là đã trả lời trong một chi tiết hơn chút ở đây:

"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)"; 
} 

cả làm việc trong trường hợp của tôi!

0

Mã cho tẩy minh bạch sử dụng globalCompositeOperation "điểm đến-out" và "nguồn-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(); 

    } 

Tôi đã sử dụng easeljs đây tuy nhiên mã này là độc lập với nó và có thể được tích hợp với bất kỳ javascript vẽ canvas html5 mã số

+0

Bạn có thể giải thích thêm về mã không? – utdev