Forked from: kadal's DiffCameraFromBG diff:39 光学迷彩 DiffCamera.as kadal forked:0favorite:2lines:162license : All rights reserved modified : 2009-04-09 17:51:54 Embed Tweet // forked from kadal's DiffCameraFromBG // forked from kadal's DiffCamera // forked from kadal's MosaicCamera // forked from kadal's BlurCamera // forked from kadal's BasicCamera /* DiffCamera.as */ package { import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.media.Camera; import flash.media.Video; import flash.events.MouseEvent; import flash.events.Event; import flash.events.TimerEvent; import flash.utils.Timer; import flash.filters.ColorMatrixFilter; import flash.geom.Point; import flash.geom.Rectangle; import net.hires.debug.Stats; import flash.filters.BlurFilter; import flash.filters.GlowFilter; [SWF(backgroundColor="#000000", frameRate=15)] public class DiffCamera extends Sprite { private var SW:Number = stage.stageWidth; private var SH:Number = stage.stageHeight; private var myCamera:Camera; private var myVideo:Video; private var myStage:Sprite = new Sprite(); private var myUI:Sprite = new Sprite(); private var myDraw:Sprite = new Sprite(); private var myBG:Bitmap; private var myEffect:Bitmap; private var samplingSize:Number = 3; private var samplesArray:Array = new Array(); private var sensitive:Number = 0x181818; public function DiffCamera():void { myCamera = Camera.getCamera(); myCamera.setMode(500, 500, 15); myVideo = new Video(stage.stageWidth, stage.stageHeight); myVideo.attachCamera(myCamera); for (var iX:int=0; iX<SW/samplingSize; iX++) { samplesArray.push(new Array()); for (var iY:int=0; iY<SH/samplingSize; iY++) { samplesArray[iX].push(0); } } var myBtn:Button = new Button(); myBtn.label = " SET Background NOW "; var myBtn2:Button = new Button(); myBtn2.label = " SET Background AFTER 3SEC "; addChild(myStage); myStage.addChild(myVideo); addChild(myUI); myUI.addChild(myBtn); myUI.addChild(myBtn2); myBtn.x = SW - myBtn.width-5; myBtn.y = SH - myBtn.height-5 - myBtn2.height-5; myBtn2.x = SW - myBtn2.width-5; myBtn2.y = SH - myBtn2.height-5; addChild(new Stats()); myBtn.addEventListener(MouseEvent.CLICK, xNow); myBtn2.addEventListener(MouseEvent.CLICK, xTimer); } private function xTimer(evt:MouseEvent):void{ myDraw.graphics.clear(); myUI.visible = false; var timer:Timer = new Timer(3000, 1); timer.addEventListener(TimerEvent.TIMER, xSnap); timer.start(); } private function xNow(evt:MouseEvent):void{ myDraw.graphics.clear(); myUI.visible = false; xSnap(null); } private function xSnap(evt:TimerEvent):void{ var myBmd:BitmapData = new BitmapData(SW, SH); myBmd.draw(myVideo); myBmd.applyFilter(myBmd, new Rectangle(0, 0, SW, SH), new Point(0, 0), new ColorMatrixFilter([1/3, 1/3, 1/3, 0, 0, 1/3, 1/3, 1/3, 0, 0, 1/3, 1/3, 1/3, 0, 0, 0, 0, 0, 255, 0])); for (var iX:int=0; iX<SW/samplingSize; iX++) { for (var iY:int=0; iY<SH/samplingSize; iY++) { var pick:int = myBmd.getPixel(iX*samplingSize, iY*samplingSize); samplesArray[iX][iY] = pick; } } var myBmdBG:BitmapData = new BitmapData(SW, SH); myBmdBG.draw(myVideo); myBG = new Bitmap(myBmdBG); myEffect = new Bitmap(myBmdBG); var filters_array:Array = new Array(); var myBlur:BlurFilter = new BlurFilter(10, 10, 1); filters_array.push(myBlur); var myGlow:GlowFilter= new GlowFilter(0x000000, 0.1); filters_array.push(myGlow); myEffect.filters = filters_array; myStage.removeChild(myVideo); myStage.addChild(myBG); myStage.addChild(myEffect); myStage.addChild(myDraw); myEffect.mask = myDraw; addEventListener(Event.ENTER_FRAME, xDraw); } public function xDraw(evt:Event):void{ var myBmd:BitmapData = new BitmapData(SW, SH); myBmd.draw(myVideo); myBmd.applyFilter(myBmd, new Rectangle(0, 0, SW, SH), new Point(0, 0), new ColorMatrixFilter([1/3, 1/3, 1/3, 0, 0, 1/3, 1/3, 1/3, 0, 0, 1/3, 1/3, 1/3, 0, 0, 0, 0, 0, 255, 0])); myDraw.graphics.clear(); for (var iX:int=0; iX<SW/samplingSize; iX++) { for (var iY:int=0; iY<SH/samplingSize; iY++) { var pick:int = myBmd.getPixel(iX*samplingSize, iY*samplingSize); if(Math.abs(samplesArray[iX][iY]-pick) > sensitive){ myDraw.graphics.beginFill(0xFF0000, 0.5); myDraw.graphics.drawRect(iX*samplingSize, iY*samplingSize, samplingSize, samplingSize) myDraw.graphics.endFill(); } } } } } } import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import flash.text.TextFormatAlign; class Button extends Sprite{ private var myStage:Sprite = new Sprite(); private var myLabel:String = "Button"; private var myTextField:TextField = new TextField(); private var myRect:Sprite = new Sprite(); public function Button(){ setBtn(); }; public function get label():String{ return myLabel; } public function set label(nLabel:String):void { myStage.removeChild(myRect); myStage.removeChild(myTextField); myLabel= nLabel; setBtn(); } private function setBtn():void{ var myTextFormat:TextFormat = new TextFormat(); myTextFormat.font = "_ゴシック"; myTextFormat.size = 11; myTextFormat.color = 0x000000; myTextFormat.align = TextFormatAlign.CENTER; myTextField.defaultTextFormat = myTextFormat; myTextField.autoSize = TextFieldAutoSize.CENTER; myTextField.text = myLabel; myTextField.selectable = false; myRect.graphics.lineStyle(1, 0x666666, 1) myRect.graphics.beginFill(0xF8F8F8, 1); myRect.graphics.drawRect(0, 0, myTextField.width+20, myTextField.height); myRect.graphics.endFill(); myStage.addChild(myRect); myStage.addChild(myTextField); addChild(myStage); myStage.buttonMode = true; myTextField.x = 10; myTextField.y = 0; } } Code Fullscreen Preview Fullscreen keiso fantasista : camera camera webCamera clear removeChild visible mask Video GlowFilter height buttonMode TimerEvent.ENTER_FRAME attachCamera Rectangle color Stats filters TimerEvent start size width Math.abs addChild