J'expérimente l'animation dans <canvas>
et je ne parviens pas à dessiner une image en biais. L'effet désiré est quelques images dessinées comme d'habitude, avec une image tournant lentement. (Cette image n'est pas au centre de l'écran, si cela fait une différence).Toile HTML5 drawImage avec un angle
Répondre
Vous devez modifier la matrice de transformation avant de dessiner l'image que vous voulez faire pivoter.
Supposons que l'image pointe vers un objet 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);
Les coordonnées x, y est le centre de l'image sur la toile.
J'ai écrit une fonction (en fonction de la réponse de Jakub) qui permet à l'utilisateur de peindre une image dans une position X, Y sur la base d'une rotation personnalisée dans un point de rotation personnalisé:
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);
}
Ensuite, vous pouvez appeler comme ceci:
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);
il est intéressant de noter que la première solution a fonctionné pour tant de gens, il n'a pas donné le résultat que je avais besoin. En fin de compte que je devais faire:
ctx.save();
ctx.translate(positionX, positionY);
ctx.rotate(angle);
ctx.translate(-x,-y);
ctx.drawImage(image,0,0);
ctx.restore();
où (positionX, positionY)
est les coordonnées sur la toile que je veux que l'image soit situé à et (x, y)
est le point sur l'image où je veux l'image pour tourner.
- 1. Toile HTML5 - Remplir un cercle avec l'image
- 2. Toile drawImage en utilisant l'URL de données
- 3. HTML/Canvas - drawImage performance avec une autre toile
- 4. Balise HTML5 pour Toile
- 5. Traduction d'une toile html5
- 6. toile HTML5 cliquez événement
- 7. Défi toile HTML5!
- 8. HTML5 problème de couche de toile
- 9. html5 - élément toile - couches multiples
- 10. Toile HTML5 vs SVG/VML?
- 11. Graphiques vectoriels HTML5 sur toile?
- 12. Bug dans l'application html5 canvas drawimage() de l'iPad?
- 13. Tileset pour jeu de toile HTML5
- 14. html5 problèmes de curseur main toile
- 15. Toile en HTML5: Suppression Rectangle Précédent
- 16. Un logiciel comme le mélange pour l'animation de toile HTML5?
- 17. Convertir PictureStream à la toile HTML5
- 18. HTML5 toile AVC() épais et floue
- 19. Partiellement transparent (opacité) HTML5 Dessin sur toile
- 20. Comment charger un fichier bitmap dans la toile de HTML5
- 21. Toile HTML5: dessine un rectangle autour du texte?
- 22. Canvas drawImage renvoie l'erreur
- 23. html5 toile en cliquant sur bezier chemin détection de forme
- 24. Comment déplacer la balle selon un angle particulier dans la toile Android?
- 25. "Mirroring" un angle
- 26. Combinaison de deux images sur une toile en HTML5
- 27. HTML5 enregistrer toile à déposer sur le serveur
- 28. Rotation 3D avec Axis & Angle
- 29. Capture d'écran vidéo HTML5
- 30. Comment ajouter une bordure sur HTML5 Toile 'Text?
Au lieu de tourner/traduire à la fin, vous pouvez faire 'context.save()' et 'context.restore()' avant et après les transformations et le dessin. –
Bien que l'utilisation de save()/restore() puisse sembler plus propre, elle serait beaucoup plus inefficace. Le moteur devra stocker/restaurer toutes les propriétés du contexte, pas seulement celles que nous manipulons ici. Cela compte dans un chemin de code sensible. –
Pour un autre exemple, voir cette question (double) et répondre: [Cadran d'une jauge en utilisant HTML5 Canvas - Rotation sur un point arbitraire] (http://stackoverflow.com/questions/4649836/dial-of-a-gauge-using -html5-canvas-rotate-about-arbitraire-point/4650102 # 4650102). – Phrogz