L'exemple en image :




Le code :
 
import flash.filters.*;
import flash.display.BitmapData;
import flash.geom.ColorTransform;
import flash.geom.Rectangle;
import flash.geom.Matrix;
sortie_vid.attachVideo(Camera.get());
leBitmap = new flash.display.BitmapData(sortie_vid._width, sortie_vid._height, false, 0);
this.createEmptyMovieClip("copie", 2);
copie._yscale = -100;
copie.attachBitmap(leBitmap, 0, "auto", true);
copie._x = sortie_vid._x;
copie._y = sortie_vid._y+sortie_vid._height*2;
this.onEnterFrame = function() {
	leBitmap.draw(sortie_vid);
	displac.mapBitmap = bitmap;
	displac.mode = "clamp";
	displac.scaleX = 20;
	displac.scaleY = 30;
	displac.componentX = 5;
	displac.componentY = 1;
	displac.alpha = 1;
	displac.mapPoint = new flash.geom.Point((mc._x-copie._x), (mc._y-copie._y));
	flt = [displac];
	if (mc._x<=0) {
		copie.filters = flt;
	} else {
		mc._x = -400;
	}
	mc._x += 8;
	updateAfterEvent();
};
var fillType:String = "linear";
var colors:Array = [0xFFFFFF, 0x000000];
var alphas:Array = [0, 100];
var ratios:Array = [0x00, 0xFF];
var matrix:Matrix = new Matrix();
matrix.createGradientBox(sortie_vid._width, sortie_vid._height/1.3, -33, 0, 0);
var spreadMethod:String = "pad";
var container:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth());
container.beginGradientFill(fillType, colors, alphas, ratios, matrix, spreadMethod);
container.moveTo(0, 0);
container.lineTo(0, sortie_vid._height);
container.lineTo(sortie_vid._width, sortie_vid._height);
container.lineTo(sortie_vid._width, 0);
container.lineTo(0, 0);
container.endFill();
container._x = sortie_vid._x;
container._y = sortie_vid._y+120;
container.cacheAsBitmap = true;
copie.cacheAsBitmap = true;
copie.setMask(container);
copie._alpha = 60;
////////////
bitmap = BitmapData.loadBitmap('fond');
var mc:MovieClip = this.createEmptyMovieClip("mc", 1);
mc.attachBitmap(bitmap, 1);
mc._visible = false;
mc._y = 240;
var displac:DisplacementMapFilter = new flash.filters.DisplacementMapFilter();