ImageLoader class for Flash 8

Thursday 17 August 2006  –  Filed under: Flash  –  9 Comments

ActionScript iconThis piece of code has been lying around for some time. I wrote it due to the fact that Flash 8 doesn’t smooth dynamically loaded images by default. This means that scaling and rotating any dynamically loaded image will make it look “jagged”.

The first (for as far as I know) to write Flash code to circumvent this issue was Master Tinic Uro himself; he is one of the engineers at Adobe working on the Flash Player. He wrote a handy function to load an image dynamically and then smooth it using a neat BitmapData / MovieClip trick

I wrapped his idea and some extras (events from MovieClipLoader class are relayed and the PNG transpareny solution is also included) in a single class I dubbed ImageLoader (duh).

Usage is as follows:

var loader:ImageLoader = new ImageLoader();
loader.addListener(this);
loader.loadImage( "some_image.jpg", some_mc );

In the sample above, the ‘this’ context will receive all events normally fired by the MovieClipLoader class while loading an image.

ImageLoader smoothing

9 Responses

  1. Eliramalho says:

    Many thanks for sharing your work and effort.
    I also don’t like open flash to view flv files.

    Thanks and good job for you.

  2. Lîtus says:

    Thanks a lot for that piece of code. I’ve been searching some of this for two weeks ago. I also found some script for solve this problem (using class BitmapData), you can read about it in my blog (in spanish…).
    [http://www.evostudio.com/litus-host/litus-blog/lb_02/post.php?view_p_id=47]

    Bye!

  3. Luke says:

    Very useful piece of code, thanks for that.

    Only unfortunate issue is that it seems to slow Flash down a lot. Is this built into newer (9+) versions of the player, I remember Tinic mentioning a more native smoothing function?

  4. Joakim says:

    Ran into a couple problems using this script as we needed to load images across domains in a flash banner ad.

    1) The mLoader instance within the class has no parent MovieClip, and triggers sandbox violations when loading images across domains. Replacing the constructor function remedies the problem:

    public function ImageLoader ( targetMc:MovieClip ) {
    targetMc.mcLoader = new MovieClipLoader();
    mLoader = targetMc.mcLoader;
    addListener(this);
    }

    2) This requires a change in the instantiation code, as the parent(ing) movieClip needs to be passed as an argument:

    1. var loader:ImageLoader = new ImageLoader(this);
    2. loader.loadImage( “some_image.jpg”, some_mc );

    3) We removed this line in the instantiation script:

    loader.addListener(this);

    The listener is added immediately within the class in the constructor function, so this seems redundant?

    Hope this can be used by others needing Flash 8 dynamic bitmap smoothing, and thanks Martijn!

  5. João says:

    I’m having some problems with the class. I´m loading the class into a another one:

    import com.planche.ImageLoader;

    and then on a function:

    public function setImage(l:String):Void
    {
    var loader:ImageLoader = new ImageLoader(this);
    loader.loadImage(l, img_mc); // where l is a string coming from loaded xml
    }

    I’ve made some tracing and the l string is ok, but the image doesn’t load… any help or any problem found..

  6. João says:

    problem solved :D

    public function setImage(l:String):Void
    {
    var loader:ImageLoader = new ImageLoader(this);
    loader.loadImage(l.toString(), img_mc); // where l is a string coming from loaded xml
    }

  7. matt says:

    excellent class. This really is a very handy bit of code. Thanks.

  8. Michael says:

    Wonderful, wonderful class. It made a world of a difference and was ridiculously easy to implement. Bravo!

  9. asri says:

    how if i want to load more than one image, and in my case i want to add my own listener.,could i?

    Thanks

Leave a Reply