【问题标题】:Check Canvas Segment For Transparency检查画布段的透明度
【发布时间】:2016-06-04 19:25:18
【问题描述】:

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

画布上有一张图片。

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

是否有一个(半)透明像素或是否有一百个都没有关系。一个简单的truefalse 值就足够了。

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

如何发现?

【问题讨论】:

  • 嗨,代码有问题。更新小提琴jsfiddle.net/f5b8o3hn
  • @bfmags 嘿,谢谢。我之前接受过它,因为它给了我完成任务所需的东西:)

标签: javascript image canvas alpha-transparency


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 2013-04-14
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 2016-05-26
    相关资源
    最近更新 更多