2016-09-13 7 views
0

私は、キャンバスの背景に私の四角形を設定したいと思います。 これまで私はこれをしました。 キャンバスの長方形の背景画像

var img = new Image() 
    img.src = //Source of an image. 
var newPattern = ctx.createPattern(img, "no-repeat"); 
ctx.fillStyle = newPattern; 
これは機能しますが、問題はキャンバスに画像を適用し、矩形には適用しないということです。

矩形の位置を変更するたびに、画像は同じ位置にとどまります。

誰でもこの問題を解決する方法を提案できるので、画像は長方形にアタッチされます。

+0

をRECTするために更新がはい 'createPattern'は、宛先として全体のキャンバスを使用し、何の' transform'が( 'CanvasPattern.setTransform'メソッドを介して)提供されていない場合、それはにデフォルト設定されます左上隅。しかし、あなたは 'no-repeat'を望んでいるので、単に' drawImage'を使うのはなぜですか? (PS:あなたの画像が何かをする前にロードされているのを忘れないでください)。 – Kaiido

+0

あなたの答えをありがとう。しかし、この場合、drawImageは正しく動作しません。矩形やその他の形状(** circle **、** triangle **、** square **など)のみに画像を表示したい矩形はマスクであるが画像はそれに添付されるので、 'cratePattern'はマスクとして機能しますが、画像はそれに添付されません。 – Zhirayr

+0

あなたが望むものは['ctx.clip()'](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/clip)ですhttps://jsfiddle.net/6cmquz58/ – Kaiido

答えて

0

指定された矩形内にのみイメージを描画する場合は、このようなことができます。

context.rect(x, y, width, height); 
context.clip(); 
context.drawImage(img, 0, 0); 

これは、コンテキストに対するすべての将来の呼のために使用されるサイズ(幅、高さ)と(x、y)に矩形を作成します。あなたはクリッピングを停止したい場合は、上記のコードの前に

context.save(); 

を追加する必要がありますし、その後

context.restore(); 

あなたは、画像を描画した後。

JSFiddle

編集:

+0

あなたの答えをありがとう、私は本当にあなたの提案を正しく適用することができなかったため、おそらくキャンバスに新しいです。私はキャンバスコースをいくつか紹介し、このステップをもう一度やろうとします。私が得たもののjsFiddleを置くでしょう。 _everyサークルは自分自身の画像を持っている必要があります_ [JsFiddle](https://jsfiddle.net/drewrg/nrq6u7qe/) – Zhirayr

+0

私はあなたのフィドル[ここ](https://jsfiddle.net/nrq6u7qe/3/)を更新しました。円とイメージを描画します(原点を越えた​​制限のためにjsfiddleロゴを使用しなければなりません)。画像は円で切り取られます。元のフィドルと比較してください。重要な機能を持つ関数はレンダリング関数です。フィドルを動作させるには、イメージの読み込みのために実行を押す必要があります。 –

+0

'fillRect'は非常に特殊なコマンドで、コンテキスト上に現在描画されているものの中から一意のパスを作成し、' clip'には使用できません。あなたが望むものは 'rect()'または他のパスコマンドです – Kaiido