La Classe BitmapData – Charger une image externe en faire un instantané et effacer l’image chargée dont nous n’avons plus besoin

19 décembre 2008 par Niums dans Action script

afficherimagebitmapdataLa  class BitmapData vous permet de travailler avec les data (pixels) de votre image. Elle permet de représenter un objet bitmapData en mémoire. Lorsque vous créez une nouvelle instance de la class , une image vide  est stockée en mémoire. Vous pourrez ensuite manipuler ces  instances avec divers méthodes de la class bitmapData. La class bitmapData est située dans le package flash.display.

Dans l’exemple donné, cliquez sur l’image pour ajouter un effet biseau.

L’exemple

La source (fla+img)

Ps : pour les actions de tween il vous faut « installer » la librairie de prototypes MC Tween (as1/2) . J’en parle ici
 
Pour débuter, créons une image  bitmap  cliquable
// import de la classe

import flash.display.BitmapData

La classe BitmapData accepte 4 arguments :
var myBitmap: BitmapData = new BitmapData (largeur, hauteur, transparence, couleurDeRemplissage);
La taille maximale pour la largeur et la hauteur est de 2880px.

var myBitmap: BitmapData = new BitmapData(140,137,true,0xFF990000);
 

Affichons l’image bitmap

Une instance de la class bitmapData est chargée en mémoire et reste invisible jusqu’à ce que vous décidiez du contraire. Pour afficher l’image, utilisez MovieClip.attachBitmap();
P.S. : il est préférable d’utiliser createEmptyMovieClip  pour créer un clip vide dont le seul but sera l’affichage du bitmap. Car le problème de BitmapData est qu’il n’existe aucune méthode permettant de retirer un bitmap à un clip auquel on l’a attaché.
On pourra donc utiliser removeMovieClip(); pour « effacer » le movie clip contenant le bitmap.

var conteneur:MovieClip = this.createEmptyMovieClip("conteneur",1)
conteneur._x = 130;
conteneur._y = 40;
conteneur.attachBitmap(myBitmap,1);
 

Créons un filtre et appliquons-le au click :

var filter:BevelFilter = new BevelFilter(5, 45, 0×000000, 0.8, 0×333333, 0.8, 20, 20, 1, 3, "inner", false);

conteneur.onPress = function() {
    myBitmap.applyFilter(myBitmap, myBitmap.rectangle, new Point(0, 0), filter);
}

 

Chargeons maintenant une image externe

// import de la classe

import flash.display.BitmapData
import flash.filters.BevelFilter;
import flash.geom.Point;
 

Création d’un movie clip qui va contenir le fichier externe :

this.createEmptyMovieClip("conteneur",this.getNextHighestDepth());
 

La classe MovieClipLoader nous permet de savoir si le chargement s’est effectué avec succès
MovieClipLoader.addListener(listener:Object) : enregistre un objet de façon à ce qu’il reçoive des notifications lors d’un appel du gestionnaire d’événements.

var mcl:MovieClipLoader = new MovieClipLoader();

mcl.addListener(this)
 

Charger le fichier externe dans « conteneur » :

mcl.loadClip("killbill.jpg",conteneur)
 

Lorsque le fichier est chargé et prêt à être utilisé, l’objet ‘mcl’ appelle la fonction onLoadInit.

function onLoadInit(){
// créons un bitmap en mémoire qui aura la même taille que l’original  et dont le fond sera transparent
// J’ai défini la taille du bitmap égale à la moitié de la taille du fichier original

    var myBitmap:BitmapData = new BitmapData(conteneur._width/2, conteneur._height/2,true,0×00FFFFFF);

    // on prend un instantané  de ‘conteneur’ qui contient le fichier chargé
    myBitmap.draw(conteneur);

        // on crée un  movie clip afin d’y dessiner l’instantané
        var capture:MovieClip = createEmptyMovieClip("capture", 10) ;
        capture._x = 17;
        capture._y = 8;
        // on colle l’instantané
        capture.attachBitmap( myBitmap, 1 ) ;
 
            var filter:BevelFilter = new BevelFilter(5, 45, 0xFFFFFF, .8, 0×000000, .8, 20, 20, 1, 3, "inner", false);
 
            capture.onRelease = function  () {
            myBitmap.applyFilter(myBitmap, myBitmap.rectangle, new Point(0, 0), filter);
 }

//Plus besoin de conteneur, on le retire
conteneur.removeMovieClip();
}
 

On peut gérer les erreurs ou du moins être au courant des évènements avec : onLoadError

function onLoadError()
{
  // s’il y a eu une erreur pas besoin de ‘conteneur’/
        trace("erreur");
    conteneur.removeMovieClip()
}
 

Voilà !

Laisser un commentaire