se me olvidaba deciros que este es el código que quiero migrar de AS2 a AS3:
Código :
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
_quality = "low";
pt = new Point();
Mouse.hide();
img = BitmapData.loadBitmap("imagen");
rc = img.rectangle;
img.width>img.height ? h=img.width : h=img.height;
h = Math.round(h);
img2 = img.clone();
temp = img.clone();
img.colorTransform(rc, new ColorTransform(1, 1, 1, 0, 127, 127, 127, 255));
img2.colorTransform(rc, new ColorTransform(1, 1, 1, 1, 0, 0, 0, 255));
temp.perlinNoise(20, 20, 2, 0, true, true, 15, false, null);
img.merge(temp, rc, pt, 80, 80, 80, 255);
temp.dispose();
img.applyFilter(img, rc, pt, new BlurFilter(4, 4, 1));
mc1 = this.createEmptyMovieClip("mc1", 1);
mc1.attachBitmap(img2, 2);
marco = this.createEmptyMovieClip("marco", 2);
marco.blendMode = 14;
mc2 = marco.createEmptyMovieClip("mc2", 1);
cl = [0xffffff, 0xe7cf07, 0];
al = [40, 60, 100];
rt = [0, 37, 255];
matrix = new Matrix();
matrix.createGradientBox(h, h, 0, h/2, h/2);
mc2.beginGradientFill("radial", cl, al, rt, matrix);
mc2.moveTo(0, 0);
mc2.lineTo(0, 2*h);
mc2.lineTo(2*h, 2*h);
mc2.lineTo(2*h, 0);
mc2.lineTo(0, 0);
mc2.endFill();
sal = temp=img.clone();
mx1 = [0, 0, 0, -1, 0, 1, 0, 0, 0];
mx2 = [0, -1, 0, 0, 0, 0, 0, 1, 0];
temp.applyFilter(img, rc, pt, new ConvolutionFilter(3, 3, mx1, 1, 127));
sal.copyPixels(temp, rc, pt);
temp = img.clone();
temp.applyFilter(img, rc, pt, new ConvolutionFilter(3, 3, mx2, 1, 127));
sal.copyChannel(temp, rc, pt, 1, 2);
temp.dispose();
dMap = new DisplacementMapFilter(sal, pt, 1, 2, -300, -300);
onMouseMove = function () {
x = h-_xmouse;
y = h-_ymouse;
dMap.mapPoint = new Point(x, y);
mc2.filters = [dMap];
mc2._x = -x;
mc2._y = -y;
updateAfterEvent();
};
onMouseMove();
He logrado hacer esto:
Código :
function update():void{
//efecto luz
//--------------------------------------------------------
var _quality: String = "low";
var pt : Point = new Point();
Mouse.hide();
var miBitmapData:BitmapData = new lllo(200,200);
var img:Bitmap = new Bitmap(miBitmapData);
trace("fail0:"+img.width+img.height);
var rc:Rectangle = new Rectangle(0,0,img.width,img.height);
if (img.width>img.height){
h=img.width;
}else{
h=img.height;
}
h = Math.round(h);
var img2 : Bitmap= img;
var temp:Bitmap = img;
img.transform.colorTransform=new ColorTransform(1, 1, 1, 0, 127, 127, 127, 255);
img2.transform.colorTransform=new ColorTransform(1, 1, 1, 1, 0, 0, 0, 255);
temp.bitmapData.perlinNoise(20, 20, 2, 0, true, true, 15, false, null);
img.bitmapData.merge(temp.bitmapData, rc, pt, 80, 80, 80, 255);
temp.bitmapData.dispose();
var filter:BitmapFilter = new BlurFilter(4, 4, BitmapFilterQuality.HIGH);
var myFilters:Array = new Array();
myFilters.push(filter);
img.filters = myFilters;
//img.bitmapData.applyFilter(img.bitmapData, rc, pt, new BlurFilter(4, 4, 1));
var mc1:MovieClip = new MovieClip();
this.addChild(mc1);
mc1.addChild(img2);
var marco:MovieClip = new MovieClip();
this.addChild(marco);
marco.blendMode = BlendMode.HARDLIGHT;
mc2 = new MovieClip();
marco.addChild(mc2);
var cl:Array = [0xffffff, 0xe7cf07, 0];
var al:Array = [40, 60, 100];
var rt:Array = [0, 37, 255];
var matrix:Matrix = new Matrix();
matrix.createGradientBox(h, h, 0, h/2, h/2);
mc2.graphics.beginGradientFill("radial", cl, al, rt, matrix);
mc2.graphics.moveTo(0, 0);
mc2.graphics.lineTo(0, 2*h);
mc2.graphics.lineTo(2*h, 2*h);
mc2.graphics.lineTo(2*h, 0);
mc2.graphics.lineTo(0, 0);
mc2.graphics.endFill();
var miBitmapData33:BitmapData = img.bitmapData;
var sal:Bitmap = new Bitmap(miBitmapData33);
trace("fail0:"+img.width+img.height);
//var miBitmapData22:BitmapData = img.bitmapData;
var miBitmapData22:BitmapData = new BitmapData(200,200,true,0x000000);
var temp2:Bitmap = new Bitmap(miBitmapData22);
temp2.bitmapData=img.bitmapData;
trace("fail0:"+temp2.width+temp2.height);
var mx1: Array = [0, 0, 0, -1, 0, 1, 0, 0, 0];
var mx2:Array = [0, -1, 0, 0, 0, 0, 0, 1, 0];
var filter2:BitmapFilter = new ConvolutionFilter(3, 3, mx1, 1, 127);
var myFilters2:Array = new Array();
myFilters2.push(filter2);
temp2.filters=myFilters2;
//temp.bitmapData.applyFilter(img.bitmapData, rc, pt, new ConvolutionFilter(3, 3, mx1, 1, 127));
trace("fail0:"+temp2.width+temp2.height);
sal.bitmapData.copyPixels(temp2.bitmapData, rc, pt);
temp2 = img;
trace("test");
var filter3:BitmapFilter = new ConvolutionFilter(3, 3, mx1, 1, 127);
var myFilters3:Array = new Array();
myFilters3.push(filter3);
temp2.filters=myFilters3;
//temp.bitmapData.applyFilter(img.bitmapData, rc, pt, new ConvolutionFilter(3, 3, mx2, 1, 127));
sal.bitmapData.copyChannel(temp2.bitmapData, rc, pt, 1, 2);
temp2.bitmapData.dispose();
dMap = new DisplacementMapFilter(sal.bitmapData, pt, 1, 2, -300, -300);
stage.addEventListener(MouseEvent.MOUSE_MOVE,MouseMove);
}
function MouseMove(e:MouseEvent):void {
var x:Number = h-e.target.mouseX;
var y:Number = h-e.target.mouseY;
dMap.mapPoint = new Point(x, y);
mc2.filters = [dMap];
mc2.x = -x;
mc2.y = -y;
this.update();
}
//---------------
Peor tengo problemas con el método copypixels. Al asociar el bitmapData al de "img", en vez de devolverme una imagen de 200x200 como es la "img" original, me devuelve una de 0x0 y el método falla:
Código :
var miBitmapData22:BitmapData = new BitmapData(200,200,true,0x000000);
var temp2:Bitmap = new Bitmap(miBitmapData22);
temp2.bitmapData=img.bitmapData;
trace("fail0:"+temp2.width+temp2.height); //¡Aqui ya devuelve 0x0 en vez de 200x200 como al principio!
var mx1: Array = [0, 0, 0, -1, 0, 1, 0, 0, 0];
var mx2:Array = [0, -1, 0, 0, 0, 0, 0, 1, 0];
var filter2:BitmapFilter = new ConvolutionFilter(3, 3, mx1, 1, 127);
var myFilters2:Array = new Array();
myFilters2.push(filter2);
temp2.filters=myFilters2;
sal.bitmapData.copyPixels(temp2.bitmapData, rc, pt);
Gracias por vuestro tiempo...