先日つくったClearTypeSWFをムービーにいれたらどうなるかやってみた。

ClearTypeSWF Movie

前回より成長したのは、RGBと3つのBitMapオブジェクトにMovieをdrawしていくやり方にした。
いやー、しかしやってみれば意外とシンプルだったけど、そこまでは超ハマった。
ちなみにattachNetStreamを3つのVideoオブジェクトに入れようとおもったんだけど、どうやらattach〜ってやつは、そいつ自身をそこに付属させる感じで、add〜はその情報のコピーを付属させる感じなんじゃないかと思った。わからん。勘です。

ま、でも思った通り、Movieの効果となると、ブラウン管テレビに虫眼鏡あててみたあの感覚がよみがえる。いい感じにアナログっぽくなって熱いね。


以下ソース

package {
    import flash.display.*;
    import flash.events.*;
    import flash.media.*;
    import flash.net.*;
    import flash.filters.*;
    import flash.geom.*;

    public class ClearTypeMovie extends Sprite {
        private var video : Video = new Video();
        private var nc : NetConnection = new NetConnection();
        private var ns : NetStream;
        private var bmd : BitmapData = new BitmapData(320,240);
        private var btPlay:playBtn = new playBtn();//flaファイルよりリンケージ

        public function ClearTypeMovie() : void {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;

            nc.connect(null);
            ns = new NetStream(nc);
            ns.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);

            var rArea:Bitmap = new Bitmap(bmd);
            var gArea:Bitmap = new Bitmap(bmd);
            var bArea:Bitmap = new Bitmap(bmd);

            var rFilter:ColorMatrixFilter = new ColorMatrixFilter();
            rFilter.matrix =  [1,	0,	0,	0,	0,
                                        0,	0,	0,	0,	0,
                                        0,	0,	0,	0,	0,
                                        0,	0,	0,	1,	0];
            var gFilter:ColorMatrixFilter = new ColorMatrixFilter();
            gFilter.matrix =  [0,	0,	0,	0,	0,
                                        0,	1,	0,	0,	0,
                                        0,	0,	0,	0,	0,
                                        0,	0,	0,	1,	0];
            var bFilter:ColorMatrixFilter = new ColorMatrixFilter();
            bFilter.matrix =  [0,	0,	0,	0,	0,
                                        0,	0,	0,	0,	0,
                                        0,	0,	1,	0,	0,
                                        0,	0,	0,	1,	0];

            rArea.filters = [rFilter];
            gArea.filters = [gFilter];
            bArea.filters = [bFilter];

            rArea.blendMode = BlendMode.SCREEN;
            gArea.blendMode = BlendMode.SCREEN;
            bArea.blendMode = BlendMode.SCREEN;

            rArea.x = 4;
            bArea.x = -4;

            addChild(rArea);
            addChild(gArea);
            addChild(bArea);

            btPlay.addEventListener(MouseEvent.CLICK, function (e:MouseEvent) {
                ns.play("movie.flv");
                addEventListener(Event.ENTER_FRAME, function(){bmd.draw(video)});
                removeChild(btPlay);
            });
            btPlay.x = 110;
            btPlay.y = 105;
            btPlay.buttonMode = true;
            addChild(btPlay);
        }
        function netStatusHandler(event:NetStatusEvent) : void {
            switch(event.info.code){
                case "NetStream.Play.Start":
                    video.attachNetStream(ns);
                break;
                case "NetStream.Play.Stop":
                    ns.seek(0);
                break;
            }
        }
    }
}

うろ覚え。あとで補足します。