2017-01-10 13 views
0

グレースケールの背景イメージとその上にあるコンテナで構成された描画アプリケーションがあります。グレースケールではありませんが、別のイメージがあります。
イメージを描画するときに、描画した場所を消去するか、グレースケールで表示してバックグラウンドでイメージを再現します。
どうすれば実現できますか?描画アプリケーション:ピクセルをグレースケールに変えたり消去したりする

<!DOCTYPE html> 
<html> 
<head> 
    <title>TODO supply a title</title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <style> 
     #wrapper { 
      width: 600px; 
      height: 400px; 
      border: 1px solid black; 
      margin: 0 auto; 
      background-image: url('elephant-nb-400.jpg'); 
     } 
    </style> 
</head> 
<body> 
    <div id="wrapper"> 
     <canvas width="600" height="400"></canvas> 
    </div> 
    <script> 
     window.onload = function() { 
      var wrapper = document.querySelector("#wrapper"); 
      var canvas = document.querySelector("#wrapper canvas"); 
      var context = canvas.getContext("2d"); 
      var image = document.createElement("img"); 
      image.setAttribute("src", "elephant-400.jpg"); 
      image.onload = function() { 
       context.drawImage(image, 0, 0, 600, 400); 
      }; 

      var positionsX = new Array(); 
      var positionsY = new Array(); 
      var movements = new Array(); 
      var imageData = context.getImageData(0, 0, canvas.width, canvas.height); 
      var data = imageData.data; 
      var isErasing; 

      canvas.addEventListener("mousedown", function(e) { 
       var mouseX = e.pageX - this.offsetLeft; 
       var mouseY = e.pageY - this.offsetTop; 
       isErasing = true; 
       addPositions(mouseX, mouseY); 
       draw(); 
      }); 

      canvas.addEventListener("mousemove", function(e) { 
       var mouseX = e.pageX - this.offsetLeft; 
       var mouseY = e.pageY - this.offsetTop; 
       if(isErasing) { 
        addPositions(mouseX, mouseY, true); 
        draw(); 
       } 
      }); 

      canvas.addEventListener("mouseup", function(e) { 
       isErasing = false; 
      }); 

      var addPositions = function(x, y, isMoving) { 
       positionsX.push(x); 
       positionsY.push(y); 
       movements.push(isMoving); 
      } 

      var draw = function(){ 
       //context.clearRect(0, 0, context.canvas.width, context.canvas.height); // Clears the canvas 

       for(var i=0; i < positionsX.length; i++) { 
        context.beginPath(); 
        if(movements[i] && i){ 

        }else{ 

        } 
        context.lineTo(positionsX[i], positionsY[i]); 
        context.closePath(); 
        context.stroke(); 
       } 
       } 

     } 


    </script> 
</body> 

答えて

0

私の問題が解決される:
はここに私のコードです。 あなたは、画像データを取得する必要があります:関数drawでvar imageData = context.getImageData(0, 0, canvas.width, canvas.height);
を()、あなたが追加する必要があります。context.putImageData(imageData, 0, 0, positionsX[i]-1, positionsY[i], 20, 20);context.moveTo(positionsX[i-1], positionsY[i-1]);後とcontext.moveTo(positionsX[i]-1, positionsY[i]);

関連する問題