Bonjour à tous,
Depuis 3 jours, je bloque sur un problème de transparence entre différentes images empilées dans un Canvas.
L'image du dessous est un jpg "embeddé" ne présentant aucun soucis à l'affichage.
Seulement, lorsque j'ajoute une image (un png contenant des zones de transparence) , seul le png est affiché et les zone transparentes sont dessinées en blanc.
voici quelques morceaux de codes choisis pour illustrer la façon dont j'ajoute le png dans le canvas :
Méthodes concernées dans l'objet conteneur, héritant de canvas :
chargement de l'image :
reception de l'image :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public function setImageFrame (AnImageSource : String) : void { var request:URLRequest = new URLRequest(AnImageSource); var imageLoader:Loader = new Loader(); imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onFrameReceptionComplete); imageLoader.load(request) }
la fonction cropAndResize (...) utilisée pour adapter une image à la taille de son conteneur :
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 private function onFrameReceptionComplete (event : Event) : void { this.setColoredFrame(0,0); if (this.frameImage != null) { this.removeChild(this.frameImage) ; } var bounds : Rectangle = new Rectangle(0,0,this.width,this.height); this.frameImage = new Image() ; var rawFrame : Bitmap = event.currentTarget.content var rawBitmapDataFrame : BitmapData = new BitmapData (rawFrame.width , rawFrame.height , true,0xFF000000) ; rawBitmapDataFrame.draw(rawFrame) ; rawFrame = new Bitmap(rawBitmapDataFrame) ; // trace (rawFrame.bitmapData.transparent); affiche true frameImage.source = LCUtilTools.cropAndResizeImage(rawFrame , bounds); trace (Bitmap(frameImage.source).bitmapData.transparent); //affiche true frameImage.smoothBitmapContent = true; this.addChild(frameImage); }
la création du bitmapdata avec pour dernier argument (0xFF000000) n'était pas faite à l'origine mais cela permettrais de definir l'alpha du bitmap. Vous lisez la version avec pour valeur 0xFF000000 mais j'ai aussi essayé avec 0x00000000 sans aucun résultat.
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 public static function cropAndResizeImage (AnImage : Bitmap , ABounds : Rectangle) : Bitmap { var celluleRawBitmap : BitmapData = AnImage.bitmapData var originalWidth:Number = celluleRawBitmap.width; var originalHeight:Number = celluleRawBitmap.height; var newWidth:Number = originalWidth; var newHeight:Number = originalHeight; var scale : Number ; var m:Matrix = new Matrix(); var scaleX:Number = 1; var scaleY:Number = 1; if (originalWidth > ABounds.width || originalHeight > ABounds.height) { scaleX = ABounds.width / celluleRawBitmap.width; scaleY = ABounds.height / celluleRawBitmap.height; scale = Math.max(scaleX, scaleY); newWidth = originalWidth * scale; newHeight = originalHeight * scale; } m.scale(scale,scale); var zoomArea : Rectangle ; zoomArea = celluleRawBitmap.rect ; zoomArea.inflate(ABounds.width , ABounds.height); var editedBitmapData : BitmapData = new BitmapData (ABounds.width , ABounds.height , true ,0xFF000000); editedBitmapData.draw(AnImage.bitmapData,m); return ( new Bitmap(editedBitmapData)); }
Je n'ai plus aucune idée pour avancer. Toute suggestion est la bienvenue, merci d'avance.
Partager