检查画布段以获得透明度

时间:2016-06-04 19:25:19

标签: javascript image canvas alpha-transparency

我有画布。画布宽w像素,h像素高。

画布上有一个图像。

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

是否存在一个(半)透明像素或者是否存在一百个透明像素并不重要。一个简单的truefalse值就足够了。

性能无关紧要(因为每次加载页面时只运行一次,大约500k像素)。

如何找到答案?

1 个答案:

答案 0 :(得分:1)

基于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)