Recherche

AS3 snippet : faire une rotation type "miroir" Envoyer
Programmation et tuning - as3
Écrit par Neamar   
Samedi, 05 Juin 2010 11:28

AS3 snippet : effectuer une rotation « miroir » sur un Bitmap.

Il faut utiliser la classe Matrix, qui dispose de propriétés pour appliquer des opérations matricielles (translation, mise à l'échelle, rotation, skew).

Rendu
Original Miroir
Image Originale Image Miroir

Le code suit.

 
/**
 * Retourne l'image passée en paramètre pour lui appliquer un effet miroir
 * @param  ImageOriginale l'image à retourner verticalement (les coordonnées Y restent im
 * @return
 */
public function mirror(ImageOriginale:search?q=Bitmap%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:Bitmap.html&filter=0&num=100&btnI=lucky">Bitmap):search?q=Bitmap%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:Bitmap.html&filter=0&num=100&btnI=lucky">Bitmap
{
  var ImageMiroir:search?q=Bitmap%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:Bitmap.html&filter=0&num=100&btnI=lucky">Bitmap = new search?q=Bitmap%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:Bitmap.html&filter=0&num=100&btnI=lucky">Bitmap();
 
  //Construction de la matrice de transformation.
  //scaleX = -1
  //Translation X : 
  var Miroir:search?q=Matrix%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:Matrix.html&filter=0&num=100&btnI=lucky">Matrix = new search?q=Matrix%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:Matrix.html&filter=0&num=100&btnI=lucky">Matrix( -1, 0, 0, 1, ImageOriginale.width, 0 );
 
  //Construction des données, en dessinant ImageOriginale avec la matrice 
  var MiroirData:search?q=BitmapData%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:BitmapData.html&filter=0&num=100&btnI=lucky">BitmapData = new search?q=BitmapData%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:BitmapData.html&filter=0&num=100&btnI=lucky">BitmapData(ImageOriginale.width,ImageOriginale.height);
  MiroirData.draw(ImageOriginale, Miroir);
 
  ImageMiroir.bitmapData = MiroirData;
  return ImageMiroir;
}
 

Oh, et juste pour le fun : si vous n'avez pas besoin d'inverser des données de pixels, vous pouvez tout simplement utiliser scaleX sur -1 qui a le même effet au rendu ;)

Mise à jour le Jeudi, 10 Juin 2010 22:13
 

Ajouter votre commentaire

Votre nom:
Votre site web:
Sujet:
Commentaire (vous pouvez utiliser de balises HTML ici):
  Code de vérification. Lettres minuscules seulement et sans espace.
Code de vérification:
Commentaires (1)
1Lundi, 01 Août 2011 17:01
Tink
Arf ! J'avais pas pensé au scaleX ou scaleY à -1. Bien joué et merci !