40

でアニメーションを試して<canvas>いますが、画像を斜めに描く方法がわかりません。望ましい効果は、1 つの画像がゆっくりと回転する、通常どおり描画されるいくつかの画像です。(この画像は画面の中央にありません。違いがある場合)。

4

3 に答える 3

80

回転するイメージを描画する前に、変換行列を変更する必要があります。

画像が HTMLImageElement オブジェクトを指しているとします。

var x = canvas.width / 2;
var y = canvas.height / 2;
var width = image.width;
var height = image.height;

context.translate(x, y);
context.rotate(angleInRadians);
context.drawImage(image, -width / 2, -height / 2, width, height);
context.rotate(-angleInRadians);
context.translate(-x, -y);

x、y 座標は、キャンバス上の画像の中心です。

于 2010-09-25T10:48:22.307 に答える
14

カスタム回転ポイントのカスタム回転に基づいて、ユーザーが X、Y 位置に画像をペイントできるようにする関数 (Jakub の回答に基づく) を作成しました。

function rotateAndPaintImage ( context, image, angleInRad , positionX, positionY, axisX, axisY ) {
  context.translate( positionX, positionY );
  context.rotate( angleInRad );
  context.drawImage( image, -axisX, -axisY );
  context.rotate( -angleInRad );
  context.translate( -positionX, -positionY );
}

次に、次のように呼び出すことができます。

var TO_RADIANS = Math.PI/180; 
ctx = document.getElementById("canvasDiv").getContext("2d");
var imgSprite = new Image();
imgSprite.src = "img/sprite.png";

// rotate 45º image "imgSprite", based on its rotation axis located at x=20,y=30 and draw it on context "ctx" of the canvas on coordinates x=200,y=100
rotateAndPaintImage ( ctx, imgSprite, 45*TO_RADIANS, 200, 100, 20, 30 );
于 2014-06-05T09:56:35.240 に答える