2016-07-18 20 views
2

私は単純な作業をしています - 1つの長方形を描き、回転してコピーし、回転したものを複製する必要があります。私はそれをそうしようとします:キャンバス上で図面を回転する

var c = document.getElementById("myCanvas"); 
var ctx = c.getContext("2d"); 

//1. rotate canvas 
ctx.rotate(-30 * Math.PI/180); 
ctx.rect(10, 60, 80, 40); 
ctx.stroke(); 

//2. copy rotated rectangle 
var img = ctx.getImageData(0, 0, 140, 140); 

//3. rotate back 
ctx.rotate(30 * Math.PI/180); 

//4. draw rotated version of the rectangle 
ctx.putImageData(img, 80, 100); 

アイデアは非常に簡単です。最初のステップでは、矩形を描き、2番目のステップでキャンバスを回転させ、スナップショット(または回転した四角形のコピーを作成)を行います。3番目のステップでキャンバスを回転させます。もう回転させないでください)、最後のステップではキャンバスに回転オブジェクトの新しいオブジェクトを追加します。しかし、これは私が得るものです:私が間違っているのは何

enter image description here

とどのように私は望ましい結果を得ることができます:私はこの絵を取得することが期待に対し

enter image description here

+0

まず実際にあなたを回転ボックスを描画しています

ポストをcanvas.toDataUrl

を使用して画像を一時的にキャンバスの素敵な例を示します。 '// 3。あなたは回転しますが、キャンバスに描画するために何もしません。 https://jsfiddle.net/jr3g9cyk/1/ – PeeHaa

+0

さて、あなたは長方形を2回描きます。しかし、私は一度それを描画し、getImageDataでクローンしたいと思います。 – Jacobian

+0

getImageDataの使用は厳密な要件です。キャッチは私が2つの長方形で私の質問を簡略化しただけですが、現実世界では状況がはるかに悪いです。私が望むのは、この背景を回転させ、そこからチャンクを作成し、後でこのチャンクを別の座標に描画することです。 – Jacobian

答えて

0

「putImageDataは、変換行列に影響されない」ここを参照してください:あなたがしたい場合putImageData() on rotated canvas work incorrect

代わりに、複雑な画像をメモリにコピーされた後、繰り返し異なる角度で画面上に描画します一時的なキャンバスの使用を検討することもできます。この投稿は、良い例を与える:あなたは複数の画像のスプライトを作成し、複数のキャンバスを作成することはしないだろう、にあなたのスプライトを描画考慮する必要がある場合は

How to rotate the existing content of HTML5 canvas?

適切に一時的なキャンバスをサイズにして、内容を変換します

https://davidwalsh.name/convert-canvas-image

+0

この回答の一部として、いくつかのコード例を含めると便利です。 – ManoDestra

+0

そして、もしこのコードが私の仕事を解決するなら、もっと役立つでしょう=)今、私は自分でそれをすることができると思います。 – Jacobian

関連する問題