flash on 2011-4-30

by tepe
♥0 | Line 75 | Modified 2011-04-30 19:01:16 | MIT License
play

ActionScript3 source code

/**
 * Copyright tepe ( http://wonderfl.net/user/tepe )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/23zp
 */

package{
    import flash.text.TextField;
    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;
    import flash.media.*;
    import flash.filters.*;
    [SWF(width="320", height="240", backgroundColor="#000000", frameRate="15")] 
    
    

    public class Main extends MovieClip{

        private var video:Video;
        
        private var bmpMC:MovieClip;
        private var bmp:Bitmap;//表示画像
        private var bmpDat:BitmapData;//前フレーム画像データ
        private var bmpDat2:BitmapData;//表示画像用データ(加工用)
        
        private var txt:TextField = new TextField();
        private var s:Sprite = new Sprite();
        
        
        public function Main(){
            
            var camera:Camera = Camera.getCamera();//カメラ使用許可
            
            if ( camera != null ) {
                //ビデオ初期化
                video = new Video( 320, 240 );//フレームサイズ
                video.attachCamera( camera );//使用カメラ
                video.visible=false;//非表示
                
                
                //画像データ
                bmpDat = new BitmapData(video.width, video.height, false, 0x000000);
                bmpDat2 = new BitmapData(video.width, video.height, false, 0x000000);
                bmp = new Bitmap( bmpDat2 );

                //ムービークリップ
                bmpMC=new MovieClip();
                bmpMC.addChild( bmp );// bmp画像を表示
                //addChild(video);
                addChild(bmpMC);
                txt.text = "aaa";
                txt.textColor = 0xffffff;
                addChild(txt);
                addChild(s);
                
                //イベント追加
                addEventListener( Event.ENTER_FRAME , capVideo );
            }
        }
        
        //毎フレーム処理
        private function capVideo( e:Event ):void{
            
            var source:BitmapData = new BitmapData(video.width, video.height, false, 0x000000);
            source.draw(video);//キャプチャデータ >>> source
            var diff:BitmapData = source.clone();//diff <<< sourceクローン
            
            // 画像ブレンド(明暗差を視覚化)  キャプチャデータ & 1フレーム前のキャプチャデータ
            diff.draw(bmpDat, new Matrix(), new ColorTransform(), BlendMode.DIFFERENCE);
            
            //var a:Array = AA(source);
            //txt.text = a.length.toString();
            /*s.graphics.clear();
            s.graphics.lineStyle(1,0xff0000);
            var i:int;
            for(i = 0;i<a.length;i++){
                s.graphics.drawCircle(a[i].x,a[i].y,4);
            }
            */

            

            bmpDat2.draw(BB(source));
            
            // bmpDat2.カラーチャンネル <<< diff.カラーチャンネル 転送
            //bmpDat2.copyChannel(diff, diff.rect, new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.GREEN);
            //bmpDat2.copyChannel(diff, diff.rect, new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.ALPHA);
            //bmpDat2.copyChannel(diff, diff.rect, new Point(), BitmapDataChannel.BLUE, BitmapDataChannel.BLUE);
            
            bmpDat = source.clone();//前フレーム画像を更新
        }
        
        
        
        //特徴点抽出
        private function AA(b:BitmapData):Array {
            var l:Array = [0, 1, 0,
                           1, 0, 1,
                           0, 1, 0];
                           
            var d:BitmapData = b.clone();
            //2値化
            d.applyFilter(b, b.rect, b.rect.topLeft,
                          new ConvolutionFilter(3, 3, l, 255));
                          
            var a:Array = [];
            for (var j:int = 1; j < b.height - 1; j++) {
                for (var i:int = 1; i < b.width - 1; i++) {
                    if (b.getPixel(i, j) != 0) {
                        var c:int = d.getPixel(i, j) & 255;
                        if (c == 1 || c == 3 || c == 4) {
                            a.push({c:c, x:i, y:j});
                        }
                    }
                }
            }
            return a;
        }
        private function BB(b:BitmapData):BitmapData{
            var l:Array = [0, 1, 0,
                           1, 0, 1,
                           0, 1, 0];
                           
            var d:BitmapData = b.clone();
            
            d.applyFilter(b, b.rect, b.rect.topLeft,
                          new ConvolutionFilter(3, 3, l, 5));

            return d;
        }   
    }
}