In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

スーパーネコ招き(ブラー効果)

wonderflにおいた画像を元に
ビットマップドローしようとすると
エラーが起きたので、アドレスを変更しました
なんだかビックリマンシールのヘッド(ホロシール)的な効果になった。
色をいじれるようになればもっと効果的かもしれない

【参照サイト】 
 AS で別ドメインの画像を読み込むときの注意点
http://d.hatena.ne.jp/nitoyon/20071112/crossdomain_img
    
前の画面を半透明にして重ねるブラー
http://hakuhin.jp/as/raster_efc.html
    
素材
http://www.flickr.com/photos/kouran/446555772/
Get Adobe Flash player
by otherone 15 Oct 2010
/**
 * Copyright otherone ( http://wonderfl.net/user/otherone )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/47wf
 */

package 
{
    import flash.display.MovieClip;
    import flash.display.BitmapData;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.display.Sprite;
    import flash.geom.Transform;
    import flash.geom.ColorTransform;
    import flash.geom.Matrix;
    import flash.events.Event;
    import flash.net.URLRequest;
    import flash.display.Loader;
    import flash.display.LoaderInfo;
    import flash.system.LoaderContext;
    import com.bit101.components.InputText;
    import com.bit101.components.PushButton;

    [SWF(frameRate = 48,backgroundColor = 0)]

    public class BlurEffect extends MovieClip
    {
        private var _mc:MovieClip=new MovieClip();
        private const STW:uint = stage.stageWidth,STH:uint = stage.stageHeight;
        private var button:PushButton;
        private var BlurLength:Number;
        private var BlurAlpha:Number;
        private var trans:Transform;
        private var color:ColorTransform;
         
        public function BlurEffect()
        {
            // write as3 code here..
            var context:LoaderContext = new LoaderContext(true);
            var url:String = "http://works.mztm.jp/moriya/nekome/nekomaneki.png";
            var _loader:Loader = new Loader();
            _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
            _loader.load(new URLRequest(url), context);


            // ローダーインフォを取得           
           // var info:LoaderInfo = loader.contentLoaderInfo;
            //info.addEventListener(Event.INIT,LoaderInfoInitFunc);
            function completeHandler(event : Event):void
            {
                _mc.addChild(_loader);
                addChild(_mc);
                _mc.x=STW/2-_mc.width/2;
                _mc.y=STH/2-_mc.height/2;
                init();
            }
            /*
            button = new PushButton(this,0,0,"クリックしてね",onMouseClick);
            button.x=STW-button.width-2;
            button.y=STH-button.height-2;
            function onMouseClick(e:Event):void
            {
                
            BlurLength = 1.001;
            BlurAlpha = 0.9;
           
            //trans = new flash.geom.Transform(render);
            color = new flash.geom.ColorTransform(
                        -1, 1, 1, BlurAlpha, 0, 0, 0, 0);
            trans.colorTransform = color;
            
            }
            */




        }

        private function init():void
        {
            // ソース用ターゲット
            var SOURCE_MOVIECLIP:MovieClip = _mc;

            var mcx:Number = SOURCE_MOVIECLIP.x;
            var mcy:Number = SOURCE_MOVIECLIP.y;
            var mcw:Number = SOURCE_MOVIECLIP.width;
            var mch:Number = SOURCE_MOVIECLIP.height;

            // ブラーの領域
            var BlurRect:Object = {
                            x:-mcw/2,
                            y:-mch/2,
                            w:mcw*2+mcw/2,
                            h:mch*2+mch/2
                        };

            // ブラー量
            BlurLength = 1.003;
            // ブラー透過度
            BlurAlpha = 0.9;

            // ブラー用ムービークリップ作成
            var bmpData:BitmapData = new flash.display.BitmapData(BlurRect.w, BlurRect.h,
                         true, 0x00FFFFFF);
            var bmpBuffer:BitmapData = new flash.display.BitmapData(BlurRect.w, BlurRect.h,
                         true, 0x00FFFFFF);

            var render:MovieClip =new MovieClip();
            SOURCE_MOVIECLIP.addChild(render);

            render.x = BlurRect.x;
            render.y = BlurRect.y;
            trans = new flash.geom.Transform(render);
            color = new flash.geom.ColorTransform(
                        -1, 1, 1, BlurAlpha, 0, 0, 0, 0);
            trans.colorTransform = color;

            addEventListener(Event.ENTER_FRAME, enterFrameHandler);
            function enterFrameHandler(event:Event):void
            {
                //バッファから描画用ビットマップに転送
                bmpData.copyPixels(bmpBuffer, new flash.geom.Rectangle(
                                0, 0, BlurRect.w, BlurRect.h), new flash.geom.Point(0, 0));

                // バッファにキャプチャー
                var m:Matrix = new flash.geom.Matrix(
                                1 , 0, 0, 1,-BlurRect.x, -BlurRect.y);
                bmpBuffer.fillRect(new flash.geom.Rectangle(
                                0, 0, BlurRect.w, BlurRect.h), 0x00FFFFFF);
                bmpBuffer.draw(SOURCE_MOVIECLIP, m);


                // 描画オフセット用行列
                m = new flash.geom.Matrix(1,0,0,1,0,0);
                m.translate(-mouseX,-mouseY);
                m.scale(BlurLength,BlurLength);
                m.translate(mouseX,mouseY);

                // 上に重ねて描画
                render.graphics.clear();
                render.graphics.beginBitmapFill(bmpData, m, true, true);
                render.graphics.moveTo(0, 0);
                render.graphics.lineTo(0, BlurRect.h);
                render.graphics.lineTo(BlurRect.w, BlurRect.h);
                render.graphics.lineTo(BlurRect.w, 0);
                render.graphics.endFill();
            }
        }




    }

}