如何从目的地中移除遗留物?

时间:2011-10-15 17:51:36

标签: javascript firefox google-chrome html5-canvas antialiasing

绘制路径然后使用globalCompositeOperation = "destination-out"绘制完全相同的路径时:

function drawPath(ctx){
  ctx.beginPath();
  ctx.moveTo(0, 0);
  ctx.lineTo(120, 120);
  ctx.bezierCurveTo(30, 40, 30, 40, 40, 120);
  ctx.lineTo(0, 0);
  ctx.fill();
}

drawPath(ctx);
ctx.globalCompositeOperation = "destination-out";
drawPath(ctx);

然后在反对边缘上留下剩余物。这在Firefox和Chrome中都会发生。

我有什么办法可以删除它们(或者不让它们出现),如果没有,那么预计会发生这种情况吗?

1 个答案:

答案 0 :(得分:2)

假设必须使用 a 的Alpha通道/不透明度绘制一个消除锯齿的像素,然后删除具有相同不透明度的像素,则绘制后的最终不透明度将为( a *(1 - a ))。

因此,如果 a 介于0%和100%之间,那么 a = 50%时,最终不透明度的最大值将为25%。

因此,这些工件预期

但是如果你要为 n 时间再次移除具有相同不透明度的像素,那么最终的不透明度将是( a *(1 - a < / em>) n ),其最大值将继续下降。因此,使用destination-out绘制足够的时间可能会删除所有工件。我认为8次就足够了。试一试:http://jsfiddle.net/dXVR7/