2014-11-16 153 views
2

我嘗試繪製我的鼠標在畫布上的路徑,但我不知道什麼是錯的,但它不畫任何東西。它適用於context.fillRect(),但不是惠普ImageData。這是我的代碼:onmouse畫布HTML5

<!DOCTYPE HTML> 
<html> 
    <head> 
    </head> 
    <body> 
    <canvas id="myCanvas" width="600" height="600" style=" border-style: solid;"></canvas> 
    <script> 

     var canvas = document.getElementById('myCanvas'); 
     var context = canvas.getContext('2d'); 
     var canvasWidth = canvas.width; 
     var canvasHeight = canvas.height; 
     var canvasData = context.getImageData(0, 0, canvasWidth, canvasHeight); 

     function drawPixel(x, y) { 
      var index = (x + y * canvasWidth) * 4; 

      canvasData.data[index] = 0; //Red 
      canvasData.data[index + 1] = 255; //Green 
      canvasData.data[index + 2] = 0; //Blue 
      canvasData.data[index + 3] = 1; //Alpha 
     } 

     function updateCanvas() { 
      context.putImageData(canvasData, 0, 0); 
     } 

     function getMousePos(canvas, evt) { 
     var rect = canvas.getBoundingClientRect(); 
     return { 
      x: Math.round((evt.clientX-rect.left)/(rect.right-rect.left)*canvas.width), 
      y: Math.round((evt.clientY-rect.top)/(rect.bottom-rect.top)*canvas.height) 
     }; 
     } 

     canvas.addEventListener('mousemove', function(evt) { 
     var mousePos = getMousePos(canvas, evt); 
     drawPixel(mousePos.x, mousePos.y); 
     updateCanvas(); 
     }, false); 
    </script> 
    </body> 
</html> 

回答

3

你要使用

canvasData.data[index + 3] = 255; 

而不是

canvasData.data[index + 3] = 1; 

當畫布的填充樣式使用0-1之間的Alpha值,當你想要實際更新畫布的原始數據,Alpha值的範圍介於0和255之間。