先日つくったClearTypeSWFをムービーにいれたらどうなるかやってみた。
前回より成長したのは、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;
}
}
}
}
うろ覚え。あとで補足します。