2009-08-22 13 views

答えて

0

はい、globalCompositeOperationで可能です。私が間違っていない場合、デフォルトの "ソースオーバー"値はSVGの "evenodd"に対応する必要があります(そうでない場合は他のものを少し試して、結果のイメージが同じかどうかを確認してください)。

+1

複数の図形を描画している場合、これは動作します。しかし、単一のパスを描いている場合、それはありません。他の考え? – devongovett

+0

複合!=塗りつぶし。彼らは異なった概念です。グローバル複合操作設定は、塗りつぶし規則に影響しません。 – jwfearn

0

数学的には、アルゴリズムの実装を意味しますか?確かに可能です。http://gpolo.awardspace.info/fill/main.htmlを参照してください。それは何よりもデモですが、この問題を「数学的に」解決します。

0

私は同じ質問をしてthis Mozilla Bugreportに出くわしました。それはbugreportersでWHATWG(キャンバス仕様)に提案されますよう

は思え:

クリス・ジョーンズ、2011年6月10日:

この仕様は固体で見られるまでのは、ドキュメントを待ちましょうwhatwg(今日は投稿します)。物事が一度に異なっている必要がありますが、長い時間前から、あなたはfill()メソッドにfillruleパラメータを渡すことができますので、本当に古い質問だ

0

。 このfillruleは、"nonzero"(デフォルト)または"evenodd"のいずれかです。

var ctx = c.getContext('2d'); 
 
drawPath(); 
 
ctx.fill(); 
 
ctx.translate(70, 0); 
 
drawPath(); 
 
ctx.fill('evenodd'); 
 
ctx.translate(70, 0); 
 
drawPath(); 
 
ctx.stroke(); 
 

 
function drawPath(){ 
 
    ctx.beginPath(); 
 
    ctx.arc(30,30,20,0,Math.PI*2); 
 
    ctx.lineTo(60,60); 
 
    ctx.lineTo(0,0); 
 
    ctx.closePath(); 
 
}
<canvas id="c"></canvas>

関連する問題