J'aimerais créer un effet de reflet pour des images mais j'arrive pas à m'en sortir avec les "mask". J'ai comme l'impression que lorsque je fais img.mask = m (avec m mon masque defini en tant que shape) je perds toutes les infos sur mon masque.

J'ai crée mon masque en tant qu'image pour pouvr l'afficher aussi et ya aucun soucis à ce niveau là, il s'affiche bien.

Voici mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package components
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
	import flash.display.GradientType;
	import flash.display.InterpolationMethod;
	import flash.display.Shape;
	import flash.display.SpreadMethod;
	import flash.geom.Matrix;
 
	import mx.controls.Image;
 
	public class ImgReflection2
	{
		private var imgBMP:BitmapData;
		private var reflecBMP:Bitmap;
		private var imgRLayerRef:DisplayObject;
		private var gradAlpha:Number;
		private var gradRatio:Number;
		private var gradWidth:int;
		private var gradHeight:int;
 
		public function ImgReflection2()
		{
 
		}
 
		public static function invertImg(img:Image):Image {
			var imgR:Image = new Image();
			var m:Shape;
			imgR.source = img.source;
			imgR.width = img.width;
			imgR.height = img.height;
			imgR.x = img.x;
			imgR.y = img.y;
			imgR.scaleY = -1;
			m = createGradient(100,255,imgR);
			m.y = imgR.y + imgR.height;
			m.x = imgR.x
			m.cacheAsBitmap = true;
			imgR.cacheAsBitmap = true;
			imgR.mask = m;
			return imgR;
		}
 
		private static function createGradient(gradAlpha:Number, gradRatio:Number, img:Image):Shape {
 
			var type:String = GradientType.LINEAR;
			var colors:Array = [0xFFFFFF, 0xFFFFFF];
			var alphas:Array = [gradAlpha/100, 0];
			var ratios:Array = [0, gradRatio];
			var spreadMethod:String = SpreadMethod.PAD;
			var interp:String = InterpolationMethod.LINEAR_RGB;
			var focalPtRatio:Number = 0;
 
			var matrix:Matrix = new Matrix();
			var boxWidth:Number = img.width;
			var boxHeight:Number = img.height;
			var boxRotation:Number = Math.PI/2; // 90�?
			var tx:Number = 0;
			var ty:Number = 0;
			matrix.createGradientBox(boxWidth, boxHeight, boxRotation, tx, ty);
 
			var square:Shape = new Shape();
			square.graphics.beginGradientFill(type, 
                            			colors,
                            			alphas,
                            			ratios, 
                            			matrix, 
                            			spreadMethod, 
                            			interp, 
                            			focalPtRatio);
			square.graphics.drawRect(0, 0, img.width, img.height);
 
 
			return square;			
		}		
	}
}

Merci d'avance.