日期:2014-05-17 浏览次数:21013 次
创建前台画布:
var canvas = document.getElementById("_canvasView");
var context = canvas.getContext("2d");
创建后台画布:
  var backend = document.createElement("canvas");
  backend.width = canvas.width;
  backend.height = canvas.height;
  var backendContext = backend.getContext("2d");
// 后台画布涂上黑色(我相信anti-aliasing不会把它搞成灰色)
  backendContext.fillStyle = "#000000";
  backendContext.fillRect(0, 0, backend.width, backend.height);
// 获取后台画布对应的像素数组
  var imageObj = backendContext.getImageData( 0, 0, canvas.width, canvas.height);
  var imageData = imageObj.data;
如果你想给这个数组里的像素赋予颜色值,可以像下面的代码:
  function setPixel(imageData, width, height, x, y, red, green, blue)
  {
    // i 没做边界条件检查,留给读者自己完成。
    var i = (y*width+x)*4;
    imageData = red;
    imageData[i+1] = green;
    imageData[i+2] = blue;
    // 下面这个是Alpha,我们不用
    //DEL: imageData[i+3]=???;
  }view plainprint?
    function setPixel(imageData, W, H, x, y, r, g, b)  
    {  
      var i = (y*W+x)*4;  
      imageData = r;  
      imageData[i+1] = g;  
      imageData[i+2] = b;  
    }  
      
    /**
    * Bresenham's draw line algorithm
    */  
    function Bresenham_drawLine(imageData, width, height, x1, y1, x2, y2, r, g, b)  
    {  
      var dx = Math.abs(x2 - x1),  
          dy = Math.abs(y2 - y1),  
          yy = 0,  
          t;  
       
      if (dx < dy) {  
        yy = 1;  
        t=x1; x1=y1; y1=t;  
        t=x2; x2=y2; y2=t;  
        t=dx; dx=dy; dy=t;  
      }         
      
      var ix = (x2 - x1) > 0 ? 1 : -1,  
          iy = (y2 - y1) > 0 ? 1 : -1,  
          cx = x1,  
          cy = y1,  
          n2dy = dy * 2,  
          n2dydx = (dy - dx) * 2,  
          d = dy * 2 - dx;   
      
      if(yy==1) {     
        while(cx != x2) {  
          if(d < 0) {      
            d += n2dy;      
          }     
          else {      
            cy += iy;      
            d += n2dydx;      
          }  
      
          setPixel(imageData, width, height, cy, cx, r, g, b);  
          cx += ix;      
        }