2011-10-15 24 views
1

在繪製路徑,然後繪製正好與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); 

再就是對反alised邊緣剩菜。這發生在Firefox和Chrome中。

有什麼我可以做的,以消除他們(或使他們不出現),如果不是,那麼這是否預計會發生?

回答

2

假設一個反走樣的像素具有與的一個 alpha通道/不透明度被吸入,然後刪除該像素具有相同的不透明度,則拉伸後的最終不透明度將(一個 *(1 - a))。

因此,如果一個之間或0%和100%,那麼最終的不透明度的最大值將是在一個 = 50%25%。

所以這些文物是預計

不過,你要是再除去具有相同的不透明度像素爲ñ倍,那麼最終的透明度將是(一個 *(1 - 一個ñ)和其最大值將繼續下降。所以保持繪製與destination-out足夠的時間可能會刪除所有的文物。我覺得8次就夠了。試試看:http://jsfiddle.net/dXVR7/

+0

謝謝,但爲什麼不能成爲'a - a'?因爲我要求刪除我已經繪製的相同的Alpha值。或者它是如何目標出局? – Shedokan

+1

這就是它的工作原理。如果你增加了50%的東西,那麼你從中刪除了50%,剩下25%。 – Thai

+0

哦,這是一個更清晰的消除。謝謝 :) – Shedokan