AS3 – Zoom Blur con Pixel Bender

Publicado por Iván Gajate el 3 de diciembre de 2012 en AS3, Flash

Pixel Bender es un lenguaje de programación creado por Adobe que permite aplicar filtros muy potentes a las imágenes aprovechando la potencia de nuestro hardware.

En este caso vamos a hacer el típico desenfoque de zoom. Utilizaremos el filtro de  Ryan Phelan.

(Archivo Flash, para verlo necesitas Adobe Flash Player.)

 

Descargar ejemplo Zoom Blur

Este es el código:

package {
 
	import flash.net.URLLoader;
	import flash.display.Shader;
	import flash.filters.ShaderFilter;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.display.MovieClip;
	import flash.events.Event;
	import fl.events.SliderEvent;
	import flash.display.Sprite;
	import flash.external.ExternalInterface;
 
	public class Main extends Sprite{
 
		private var _clip:MovieClip;
		private var _loader:URLLoader;
		private var _shader:Shader;
		private var _zoomFilter:ShaderFilter;
 
		public function Main() {
			_clip = clip_mc;
			deslizador.visible = false;
			loadFilter();
 
		}
 
 
		// Cargo el filtro
		private function loadFilter():void {
			_loader = new URLLoader();
			_loader.dataFormat = URLLoaderDataFormat.BINARY;
			_loader.addEventListener(Event.COMPLETE, filterLoadComplete);
			var path:String = this.loaderInfo.loaderURL;
			var index:Number = path.lastIndexOf("/");
			if(index != -1){
				path = path.slice(0, index) + "/";
			}else{
				path = "";
			}
			//trace(path);
			_loader.load(new URLRequest(path + "zoomBlur.pbj"));
		}
 
		// Cuando esta cargado creo el Shader e inicializo algunos valores
		private function filterLoadComplete(event:Event):void {
			_shader = new Shader(_loader.data);
 
			// valores entre 0 y 2048
			_shader.data.center.value = [_clip.width*0.5, _clip.height*0.5];
			_zoomFilter = new ShaderFilter(_shader);
 
			// Comienzo a escuchar el evento del deslizador
			deslizador.visible = true;
			deslizador.addEventListener(SliderEvent.CHANGE, sliderChanged);
		}
 
		// Cuando se mueve el deslizador actulizo el filtro y el label del deslizador
		private function sliderChanged(e:SliderEvent):void{
			updateBlur(e.value);
			label.text = String(e.value);
		}
 
		// Cambia el valor del desenfoque y refresca el clip
		private function updateBlur(amount:Number):void{
			// Valores entre 0 y 0.5
			_shader.data.amount.value = [amount];
			_zoomFilter.shader = _shader;
			_clip.filters = [_zoomFilter];
		}
 
 
 
 
	}
 
}

 

Los comentarios están cerrados.