代码之家  ›  专栏  ›  技术社区  ›  Lucien

检查画布段的透明度

  •  1
  • Lucien  · 技术社区  · 9 年前

    我有一张画布。画布是 w 像素宽度和 h 像素高。

    画布上有一个图像。

    两点之间是否存在不透明度小于1.0的像素(或更多) (a,b) (c,d) ?

    不管是一个(半)透明像素还是一百个。一个简单的 true false 值就足够了。

    性能并不重要(因为每次加载页面时只运行一次,大约50万像素)。

    如何发现?

    1 回复  |  直到 9 年前
        1
  •  1
  •   Community Mohan Dere    8 年前

    基于 Bresenham algorithm in Javascript

    https://jsfiddle.net/f5b8o3hn/

    function line(x0, y0, x1, y1){
       var dx = Math.abs(x1-x0);
       var dy = Math.abs(y1-y0);
       var sx = (x0 < x1) ? 1 : -1;
       var sy = (y0 < y1) ? 1 : -1;
       var err = dx-dy;
    
       while(x0!=x1 || y0!=y1){
    
         var pixeldata = context.getImageData(x0, y0, 1, 1);
         var data = pixeldata.data;
         for (var i = 0, n = data.length; i < n; i += 4) {
            if (data[i + 3] < 255) {
              console.log(true); //true 
              break;
            }
            console.log(data[i + 3]);
         }
    
         var e2 = 2*err;
         if (e2 >-dy){ err -= dy; x0  += sx; }
         if (e2 < dx){ err += dx; y0  += sy; }
       }
    }
    
    //pixeldata[0]   Value of red in decimal (int between 0 and 255)
    //pixeldata[i+1] Value of green in decimal (int between 0 and 255)
    //pixeldata[i+2] Value of blue in decimal (int between 0 and 255)
    //pixeldata[i+3] Alpha Value (int between 0 and 255)
    
    推荐文章