2011-08-05 19 views
0

アークを描くことができ、JavaScriptを使用してキャンバス上に画像を描画できますが、両方を行うにはどうしますか?つまり、実線ではなく円弧でイメージを描くことがありますか?イメージをキャンバス上の円弧で描画できますか?

もしそうでない場合は、画像をアークさせる別の方法はありますか?

アークの点に沿って画像をピクセル単位で変換しようとしましたが、JavaScriptのピクセルデータを直接取得できないため、非常に遅くて見苦しくなります(または?私は方法を見なかったので)各ピクセルのために、私は弧に沿ってポイントを計算し、現在のイメージピクセルを描画し、再フェッチし、計算されたポイントにイメージデータを描画し、キャンバス上のそのポイントをクリアする必要がありました。

答えて

4

画像に基づいてstrokeStyleをCanvasPatternに設定しようとしましたか?あなたはこのような何かを行うことができますようにそれは(imgと仮定すると、あなたがから描きたいHTMLImageElementで、ctxがCanvasRenderingContext2Dです)になります。

var pattern = ctx.createPattern(img, "repeat"); 
ctx.strokeStyle = pattern; 
ctx.beginPath(); 
ctx.arc(123, 408, 80, 0, 1.5*Math.PI, false); 
ctx.stroke(); 
+1

それはあなたがそれを得ることができるほど良くはありません。 ctx.translateを円弧の左上隅に使用して(パターン原点がその点に存在するように)、その周りに円弧を描画する方が良いです。サイズも同じですが、ctx.scale()で目的のサイズになるようにパターンを拡大しなければならないかもしれません。 – Rickard

+0

面白いですが、私はストロークの画像を使うことはできません。先端をありがとう:) – Megatron

+0

@メガトロン私は[仕様](http://dev.w3.org/html5/2dcontext/Overview.html#conformance-requirements)でそれを見上げるまで私はどちらも知らなかった。私はあなたがすでにあなたのバックポケットにその参照を持っていると仮定していますが、思い出させるために、通常この種のものに対する答えがあります。 – sethobrien

0

円弧を作成するには、このHTMLを使用: - こう

<canvas id="myCanvas" width="578" height="250"></canvas> 
<script> 
    var canvas = document.getElementById('myCanvas'); 
    var context = canvas.getContext('2d'); 
    var x = canvas.width/2; 
    var y = canvas.height/2; 
    var radius = 75; 
    var startAngle = .8 * Math.PI; 
    var endAngle = 2.2 * Math.PI; 
    var counterClockwise = false; 

    context.beginPath(); 
    context.arc(x, y, radius, startAngle, endAngle, counterClockwise); 
    context.lineWidth = 30; 

    // line color 
    context.strokeStyle = 'blue'; 
    context.stroke(); 
    var canvas = document.getElementById('myCanvas'); 
    var context = canvas.getContext('2d'); 
    var x = canvas.width/2; 
    var y = canvas.height/2; 
    var radius = 75; 
    var startAngle = 8 * Math.PI; 
    var endAngle =2.3 * Math.PI; 
    var counterClockwise = false; 

    context.beginPath(); 
    context.arc(x, y, radius, startAngle, endAngle, counterClockwise); 
    context.lineWidth = 30; 

    // line color 
    context.strokeStyle = 'red'; 
    context.stroke(); 
</script> 
関連する問題