Bonjour

Je travaille sur une application dans laquelle on charge un certain nombre d'images (jusqu'à 200) qu'on affiche à l'écran et l'utilisateur peut passer de l'une à l'autre en scrollant, drag'n'droppant, etc...
Comme charger 200 images de bonne qualité prend énormément de ressources, chaque image est stockée sur un serveur distant dans 2 qualités différentes que j'appellerai imageLQ et imageHQ.

Je charge d'abord toutes les imageLQ de qualité moyenne. Elles sont sauvegardées dans des variables Bitmap et donc utilisables à tout moment. Lorsque l'utilisateur s'arrête sur une image en particulier (l'image 35 par exemple donc l'image imageLQ35 est utilisée), je lance le chargement de sa bonne qualité: imageHQ35.

Lorsque imageHQ35 est chargée, je remplace la source de mon image (imageLQ35) par la nouvelle source (imageHQ35).

Mon problème se situe à ce changement de source.

J'ai d'un côté mon composant Image:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<mx:Image id="image" />
de l'autre mon bitmap imageLQ35 loadé de cette façon:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, imageNotLoaded);
 
var urlRequest:URLRequest = new URLRequest('http://yuukuari.free.fr/Flex/Image1.png');
loader.load(urlRequest);
 
function imageLoaded(event:Event):void {
var mySmoothImage:Bitmap = new Bitmap();
mySmoothImage = event.target.content;
mySmoothImage.smoothing = true;
this.imageLQ35 = mySmoothImage;
}
Pour "placer" ce bitmap dans mon composant Image, je change sa source de cette façon:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
this.image.source = this.imageLQ35
L'image s'affiche bien.
Lorsque l'utilisateur s'arrête sur cette imageLQ35, je lance le chargement de la même façon que l'image LQ (avec un loader, etc...) et lorsqu'elle est chargée, je fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
this.image.source = this.imageHQ35
A cet instant-là, le bitmap utilisé comme ancienne source de mon composant Image (donc ici imageLQ35) est supprimé, ou plutôt "vidé". Le Bitmap existe toujours mais sa "BitmapData" est elle "null"...
Du coup si je veux revenir à l'ancienne image, imageLQ35, je ne peux pas à moins de la recharger.


J'aimerais que ce changement de source ne supprime pas l'ancienne source d'image :/ j'ai contourné le problème en faisant une copie temporaire du bitmap avant de le changer:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
var tempBitmap:Bitmap = this.imageLQ35; //Je copie this.imageLQ35
this.image.source = imageHQ35; //this.imageLQ35 est "vidée"
this.imageLQ35 = tempBitmap; //Je "rempli" this.imageLQ35
Mais bon .. ce serait mieux de régler le problème!

Merci de votre aide

Yuukuari