私は一見シンプルなグラフィックに取り組んでいます。サークルを作成し、サークルを結んでいる線で、サークルに背景を塗りつぶしたいと思います。私はほとんどそれを持っているが、このワンピースは私を引き上げている。HTMLキャンバス上でのレイヤー化とアウトライン化
私は、円を作成し、キャンバスを定義することができ、かつラインうまくそれらを接続する:
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
canvas.width = $(window).width();
canvas.height = $(window).height();
ctx.beginPath();
ctx.strokeStyle = "black";
ctx.lineWidth = 10;
//Create two nodes
ctx.arc(100, 100, 25, 0, 2*Math.PI);
ctx.moveTo(200+25, 200)
ctx.arc(200, 200, 25, 0, 2*Math.PI);
//line connecting two nodes
ctx.moveTo(100, 100);
ctx.lineTo(200, 200);
ctx.stroke();
これは次のようになります。
は、私はその後、やることはいっぱいありますイメージを持つ円(これは私がclip()
を使用する理由です)が、例のために白い色の塗りつぶしを使用しても問題が示されます。
//simulate filling in nodes with image, in this case solid color
ctx.clip();
ctx.fillStyle = "white";
ctx.fill();
今、私はほとんどそこだが、私は読んだことがあり、いくつかのギザギザがあると、Chromeでほんの少しの「バグ」であり、また、私は円上の太い黒のアウトラインが好き。だから、私はの2つのサークルに戻って、それらの輪郭を描きたいと思う。コンテキストは常に行の2を接続することを覚えて、私はstroke()
を呼び出した後、画像の上に接続線で終わる、私は何をすべきかに関係なく、思わない:
//would like to just re-outline circles, not connecting line
ctx.stokeStyle = "black";
ctx.arc(100, 100, 25, 0, 2*Math.PI);
ctx.moveTo(200+25, 200)
ctx.arc(200, 200, 25, 0, 2*Math.PI);
ctx.stroke();
白い背景(画像を読み込む)で塗りつぶした後、再び2つのサークルの輪郭を描く方法は分かりませんか?
私はそれをレイヤーのように考えます。最初にいくつかの線を引いてから、イメージを入れてから、もう一度上に描画します。 htmlキャンバスがそのように使用されるのかどうかは不明です。ありがとう。
、非常に参考に感謝!ちょうど質問ですが、 "再レンダリング"とはどういう意味ですか?ギザギザのエッジの問題に役立つそれらをレンダリングする別の方法がありますか?あなたのソリューションは間違いなく動作しますが、私のプロダクションコードはイメージを非同期にロードします。このようなことは何らかの理由でうまく動作しません。また、あなたのコードでは、イメージを正しいサイズにするために必要な 'clip'を使用していません。しかし、とにかく。 –
@ jeffery_the_wind再レンダリング、私はあなた自身が再びサークルを描いていることを意味します。アンチエイリアシングは、エッジでアルファを持つピクセルを描画することによって機能します。エッジのピクセルが暗くなる(または色に応じてより明るくなる)2回目にシェイプを描くと、それらがジャギーに見えます。それでもクリップは使用できますが、ルールは同じです。クリップを定義するにはbeginPathを使用します(一意のパスを定義するたびにbeginPathを使用します)。画像については、レンダリングする前に画像をロードするまで待ってください。 – Blindman67