BitmapData Vs. External Images

Maybe someone can help me?

I’m trying to program image transitions with BitmapData, between PNG files that will be dynamically loaded from a folder, and be updated by a PHP system.

I found out a code in the web and adapted for my needs, and it works for images there are within the library. Here’s the code:

import flash.display.*;
import flash.geom.*;

MovieClip.prototype.linearMove = function(dist:Number){
	this.walked = 0
	this.onEnterFrame = function(){
		this._x+=this.velx;
		this._y+=this.vely;
		this.walked+=int(this.vel);
		if(this.walked>dist) {
			delete this.onEnterFrame;
			this.removeMovieClip();
		}
	}
}

var imagens:Array = new Array("img01.png","img02.png","img03.png","img04.png");
var imagemAtual:Number = 0;

foto = BitmapData.loadBitmap(imagens[imagemAtual]);
larg = foto.width;
alt = foto.height;

container = this.createEmptyMovieClip("container",1);
container.createEmptyMovieClip("holder", 1); container.holder.attachBitmap(foto, new Matrix()); container.holder._x = 0; container.holder._y = 0;

container.setMask(foto);

function nextImg(where){
	if((imagemAtual+1) > imagens.length-1){
		imagemAtual = 0;
	}else{
		imagemAtual++;
	}
	linhas(imagemAtual);
	
}
transition = "linhas";
run = setInterval(nextImg, 3000, this);

function linhas(nr){
	var trans:BitmapData = BitmapData.loadBitmap(imagens[nr]);
	var pieces:Array = new Array();
	var area:Number = 1;
	var col:Number = 1;
	var fil:Number = alt/area;
	var p:Point = new Point(0,0);
	var counter:Number = 200;
	
	for (var c=0; c<col; c++){
		for (var f=0; f<fil; f++){
			this[c+"_"+f] = new BitmapData(larg, area, false, 0xFF0000);
			
			t = container.createEmptyMovieClip("MC"+c+"_"+f, counter++);
			pieces.push(t);
			
			t.velx = int(Math.random()*10)+5;
			t.vely = 0;
			
			t.attachBitmap(this[c+"_"+f], 1);
			
			var px:Number = c*area;
			var py:Number = f*area;
			
			t._x = container.holder._x + px;
			t._y = container.holder._y + py;
			
			var zone:Rectangle = new Rectangle(px, py, larg, area);
			
			this[c+"_"+f].copyPixels(foto, zone, p);
		}
	}
	container.holder.attachBitmap(trans, 1);
	
	for(var i in pieces) pieces*.linearMove(20);
	foto.draw(container.holder)
	trans.dispose();
}

With the code above, the transition works. Just put some images in the library, update the ‘imagens’ array, export the images for actionscript and voilá!

Well, my problem is, i wanna do it dynamically. I searched the web for another code, and found out this:

import flash.display.BitmapData;
 import flash.geom.Rectangle;
 import flash.geom.Matrix;
 import flash.geom.ColorTransform;

 function init(){
	 Stage.align = "TL";
	 Stage.scaleMode = "noScale";
	
	 createEmptyMovieClip("image_mc", 0);
	
	 var mcl:MovieClipLoader = new MovieClipLoader();
	 mcl.addListener(this);
	 mcl.loadClip("img01.png", image_mc);
	 image_mc._x = 300;
	}
	
	 function onLoadInit(target)
	 {
	 var width:Number = image_mc._width;
	 var height:Number = image_mc._height;
	
	 var myBitmapData:BitmapData = new BitmapData(width, height, true, 0xFF0000);
	 myBitmapData.draw(image_mc, new Matrix(), new ColorTransform());

 }
 
 init();

A lot simpler, but when I try to put everything altogether, I think i messed up something, because nothing works. My code is down below. Is there anyone out there that can help me?


import flash.display.*;
import flash.geom.*;

MovieClip.prototype.linearMove = function(dist:Number){
	this.walked = 0
	this.onEnterFrame = function(){
		this._x+=this.velx;
		this._y+=this.vely;
		this.walked+=int(this.vel);
		if(this.walked>dist) {
			delete this.onEnterFrame;
			this.removeMovieClip();
		}
	}
}

carregaFoto = function(img:Number){
	
	var loadListener:Object = new Object();
	
	image_mc = _root.createEmptyMovieClip("image_mc", 0);
	image_mc._y = 300;
	var mcl:MovieClipLoader = new MovieClipLoader();
	mcl.addListener(loadListener);
	mcl.loadClip(_root.imagens[img], image_mc);
		
	loadListener.onLoadComplete = function(mcl:MovieClipLoader) {
		var w:Number = image_mc._width;
		var h:Number = image_mc._height;
		
		var obj:BitmapData = new BitmapData(300,300);
		obj.draw(image_mc, new Matrix());
		return obj;
	}
}

//Imagens
var imagens:Array = new Array("img01.png","img02.png","img03.png","img04.png");
var imagemAtual:Number = 0;

/*
foto = BitmapData.loadBitmap(imagens[imagemAtual]);
larg = foto.width;
alt = foto.height;
*/

var foto:BitmapData = carregaFoto(0);

container = this.createEmptyMovieClip("container",1);
container.createEmptyMovieClip("holder", 1); container.holder.attachBitmap(foto, new Matrix()); container.holder._x = 0; container.holder._y = 0;

container.setMask(foto);

function nextImg(where){
	if((imagemAtual+1) > imagens.length-1){
		imagemAtual = 0;
	}else{
		imagemAtual++;
	}
	linhas(imagemAtual);
	
}
transition = "linhas";
run = setInterval(nextImg, 3000, this);

function linhas(nr){
	var trans:BitmapData = carregaFoto[nr];
	var pieces:Array = new Array();
	var area:Number = 1;
	var col:Number = 1;
	var fil:Number = alt/area;
	var p:Point = new Point(0,0);
	var counter:Number = 200;
	
	for (var c=0; c<col; c++){
		for (var f=0; f<fil; f++){
			this[c+"_"+f] = new BitmapData(larg, area, false, 0xFF0000);
			
			t = container.createEmptyMovieClip("MC"+c+"_"+f, counter++);
			pieces.push(t);
			
			t.velx = int(Math.random()*10)+5;
			t.vely = 0;
			
			t.attachBitmap(this[c+"_"+f], 1);
			
			var px:Number = c*area;
			var py:Number = f*area;
			
			t._x = container.holder._x + px;
			t._y = container.holder._y + py;
			
			var zone:Rectangle = new Rectangle(px, py, larg, area);
			
			this[c+"_"+f].copyPixels(foto, zone, p);
		}
	}
	container.holder.attachBitmap(trans, 1);
	
	for(var i in pieces) pieces*.linearMove(20);
	foto.draw(container.holder)
	trans.dispose();
}

Thanks a lot in advance.

Bruno Schweller
www.quimeras.com.br