package {
import com.adobe.viewsource.ViewSource;
import com.bit101.components.CheckBox;
import com.bit101.components.HUISlider;
import com.bit101.components.Label;
import com.bit101.components.PushButton;
import com.quasimondo.filters.MedianFilter_RGB;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.utils.getTimer;
[SWF('700',height='400',frameRate='32',backgroundColor='0x000000')]
public class Median extends Sprite
{
[Embed("assets/bang.jpg", mimeType="image/png")]
protected var SourceImage:Class;
private var radiusSlider:HUISlider;
private var applyButton:PushButton;
private var asyncChk:CheckBox;
private var img_in:BitmapData;
private var img_out:BitmapData;
private var lbl:Label;
private var t:int;
private var filter:MedianFilter_RGB;
public function Median()
{
stage.scaleMode = "noScale";
stage.align = "TL";
ViewSource.addMenuItem(this, "srcview/index.html");
run();
}
private function run():void
{
radiusSlider = new HUISlider(this,5,5,"Radius" );
radiusSlider.minimum = 1;
radiusSlider.maximum = 100;
radiusSlider.value = 1;
applyButton = new PushButton(this,310,4,"Apply Median", applyFilter );
asyncChk = new CheckBox( this,190,9,"Asynchronous");
lbl = new Label(this,460,4,"Render Time:");
img_in = Bitmap( new SourceImage() ).bitmapData;
img_out = img_in.clone();
var bm1:Bitmap = new Bitmap(img_in);
var bm2:Bitmap = new Bitmap(img_out);
bm1.y = bm2.y = 32;
bm2.x = img_in.width;
addChild( bm1 );
addChild( bm2 );
filter = new MedianFilter_RGB();
filter.addEventListener( Event.COMPLETE, onMedianComplete );
}
private function applyFilter( event:MouseEvent ):void
{
img_out.copyPixels( img_in, img_in.rect, img_in.rect.topLeft );
t = getTimer();
filter.applyFilter( img_out, radiusSlider.value, asyncChk.selected);
if ( !asyncChk.selected ) {
lbl.text = "Render Time: "+( getTimer() - t )+" ms";
} else {
lbl.text = "Render Time: ...";
}
}
private function onMedianComplete( event:Event ):void
{
lbl.text = "Render Time: "+( getTimer() - t )+" ms";
}
}
}