Créer un objet Bitmap à partir d’une image interne en AS3

Dans une application ActionScript 3 il est parfois nécessaire de faire appel à des ressources externes comme des sons, des images, des fichiers XML, etc… Nous avons alors deux cas de figure :Le fichier est présent sur un serveur (de la musique par exemple pour un lecteur audio)Le fichier est interne à l’application et embarqué dans le swf (des textures pour un jeu)Dans le premier cas on utilisera des objets URLLoader, URLRequest et on traitera les evenements qui vont bien pour récupérer nos données. Voici un exemple très minimaliste qui récupère une image sur un serveur :

package
{ 
    import flash.display.Sprite;  
    import flash.display.Loader; 
    import flash.net.URLLoader;  
    import flash.net.URLRequest;  
    import flash.net.URLLoaderDataFormat;  
    import flash.net.Event;

    public class Main extends Sprite  
    {    
        private var urlLoader:URLLoader;

        public function Main()    
        {      
            urlLoader = new URLLoader();      
            var request:URLRequest = new URLRequest("http://www.monsite.com/images/background.jpg");       
            urlLoader.dataFormat = URLLoaderDataFormat.BINARY;       
            urlLoader.load(request);      
            urlLoader.addEventListener(Event.COMPLETE, onComplete);    
       }

       private function onComplete(e:Event):void    
       {      
             var loader:Loader = new Loader();      
             loader.loadBytes(urlLoader.data); // On récupère l'image au format brute      
             this.addChild(loader); // Loader hérite de DisplayObject     
        }  
    }
}

Maintenant le deuxième cas est plus simple encore, imaginons que vous ayez déjà vos ressources, vous allez les copier dans votre dossier de projet (personnellement je créé toujours un dossier « assets » pour classer mes fichiers internes) et lors de la compilation ceux ci seront empaquetés dans le fichier SWF, comment faire pour charger une image depuis ce dossier « assets » ?

Avec l’interface Flash CS il est très facile de la faire, on va créer un MovieClip et lui attribuer graphiquement une image (Too Easy for me..), mais ceux qui n’utilisent pas l’outil propriétaire d’Adobe (ce qui est mon cas et surement le votre si vous lisez cet article) devront agir autrement. On utilisera le tag [Embed] pour spécifier au compilateur qu’un fichier ressources en empaqueté dans le SWF, de là on en créera une classe qui nous servira à instancier un objet de type Bitmap qui pourra ensuite être utilisé avec le stage et ses enfants (Dérivant de DisplayObject).

Voici donc le code qui va vous permettre de charger une image stockée dans un dossier assets, depuis votre projet.

package
{  
    import flash.display.Sprite;  
    import flash.display.Bitmap;    

    public class Main extends Sprite  
    {    
        // Ressource embarquée dans le SWF    
        // Type Class : Votre objet Bitmap (dérive de DisplayObject)  
        [Embed("../assets/fond.png")] public var BackgroundClass:Class; 
        private var background:Bitmap;

        public function Main()    
        {      
            background = new BackgroundClass();      
            this.addChild(background); // Enjoy !  
        }  
    }
}

Et voilà, juste avec ce code vous avez votre image prête à être ajoutée à n’importe quel conteneur acceptant des DisplayObject ! Si vous avez d’autres manières de réaliser cette opération (sans l’EDI Flash) ou que vous voulez réagir, n’hésitez pas à laisser un commentaire.
Bon code, bon Flash 😉