2010-01-24 4 views
0

Comment faire pivoter une image, par ex. 180 degrés dans le sens horaire en utilisant la matriceFlex Matrix rotate Image n degrés

je peux utiliser le code suivant pour faire pivoter l'image de 90 degrés, mais il est incrémentale, meaing

var matrix:Matrix = new Matrix(); 

matrix.rotate(Math.PI/2); 
matrix.tx = imgControl.content.height; 

var bitmapData:BitmapData = new BitmapData(imgControl.content.height, imgControl.content.width); 
bitmapData.draw(imgControl.content, matrix); 
imgControl.source = new Bitmap(bitmapData); 

Chaque fois que je lance le code de l'image est mise en rotation de +90 degrés. Ce que je veux, c'est ne pas incrémenter de 90 à chaque fois, mais explicitement dire tourner 180, faire pivoter 90 et ainsi de suite.

Je ne suis pas familier avec la matrice, mais je suppose que c'est la manipulation de bitmapdata réel plutôt que juste par exemple. faites pivoter la case du composant Image (arrêtez-moi si je me trompe).

Si oui, je suppose que je dois réinitialiser l'image chaque fois que je fais la commande de rotation.

Ai-je raté quelque chose?

Merci à l'avance pour tous les conseils et astuces

Ran

Répondre

1

La matrice ne pas réelle manipulation BitmapData.

C'est l'appel bitmap.draw qui dessine l'image pivotée du contenu imgcontrol.content dans le bitmap, après quoi votre code écrase imgcontrol.content avec l'image pivotée.

Alors que votre code est présent, oui, vous devez soit rafraîchir l'image à partir de zéro avant chaque rotation, ou vous devrez suivre les rotations dans une variable et calculer combien de fois vous devez faire tourner pour arriver à la rotation désirée.

Si vous devez faire une rotation multiple de 90 degrés en une seule étape, puis remplacez

matrix.rotate(Math.PI/2); 

avec

matrix.rotate(Math.PI/2 * howmanytimesyouwanttorotateby90degrees); 
+1

Parlé comme un véritable Oracle. Je pense que c'est celui-là. –

+0

matrix.rotate (Math.PI/2 * 2); Rend l'image disparue – Ran

+0

oh oui! c'est pour ça que la ligne 'matrix.tx' est là! .rotate tourne autour d'un coin de l'image (probablement en bas à gauche?); donc vous faites pivoter l'image "out" de la boîte/rectangle, de sorte que vous devez traduire (shift/push) l'image dans la boîte. vous pouvez le faire avec .tx pour x direction et je suppose .ty pour y direction. Prenez un morceau de papier et dessinez-le par vous-même, et expérimentez avec du code, pour voir quelle direction vous devez traduire et de combien. –