« 時計回り反時計回り | メイン | Snippets に参加 »

ちょい絶のやつソース公開

del.icio.us it!   hatena bookmark
コメントもらった http://un-q.net/2007/12/post_20.html#comment-13250
あと、すごくあつかましいと思うのですが、もし支障がないようでしたらよろしければソースを見せていただけないでしょうか? 初対面(?)なのにこんな事聞いていいのか迷ったですが、ほんとに「もしよければ」でいいので、よければ勉強させてください、 よろしくお願いします。

ということでしたので、まだ作ってる途中でぐちゃぐちゃだけど公開しておきます。
ソースは途中でもいいから公開した方がいいよいいよーって誰かが言ってた気もするし。
だれか添削してくださいな

ActionScript3.0 ColorTracking UI 赤色でをカーソルとして認識
http://labs.un-q.net/as3/camera/colorTracking/03/
Screenshot_3.png
package {

    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;    
    import flash.media.Camera;
    import flash.media.Video;
    import net.un_q.utils.ColorUtil;
    
    public class ColorTracking03 extends Sprite {
        
        private var camera:Camera;
        private var video:Video;

        private var srcbd:BitmapData;
        private var viewbd:BitmapData;
        private var greenbd:BitmapData;
        private var bluebd:BitmapData;
        private var drawbmd:BitmapData;
        
        private var mt:Matrix;
        private var mirrorMt:Matrix;
        private var pt:Point;
        private var rect:Rectangle;
        private var ct:ColorTransform;

        private var w:int;
        private var h:int;

        private var drawsp:Sprite;
        private var g:Graphics;

        private var nowx:int;
        private var nowy:int;

        private var penFlag:Boolean = false;
        
        public function ColorTracking03() {
            init();
        }

        
        private function init():void {

            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            camera = Camera.getCamera();

            if (camera != null) {
                setupCamera();
            } else {
                trace("not camera");
                return;
            }

            w = camera.width*2;
            h = camera.height*2;
       
            srcbd = new BitmapData(w, h ,false,0xff000000);
            viewbd = new BitmapData(w, h, false, 0xff000000);
            greenbd = new BitmapData(w, h);
            bluebd = new BitmapData(w, h);
            drawbmd = new BitmapData(w, h, true, 0x00ffffff);
            
            mirrorMt = new Matrix();
            mirrorMt.scale(-1, 1);
            mirrorMt.translate(w,0);            

            pt = new Point(0,0);
            rect = new Rectangle(0,0,w, h);
            ct = new ColorTransform();
            mt = new Matrix();

            addChild(new Bitmap(srcbd));
            var v:DisplayObject = addChild(new Bitmap(viewbd));
            v.x = w + 10;
            
            addEventListener(Event.ENTER_FRAME, loop);

            // Sprite drawsp
            drawsp = new Sprite();
            addChild(drawsp);
            drawsp.y = h + 10;

            g = drawsp.graphics;
            g.beginFill(0xffffff);
            g.drawRect(0,0,w,h);
            g.endFill();
            
            g.lineStyle(2, 0x000000,1,false,"normal",CapsStyle.ROUND,JointStyle.ROUND,3);

            stage.addEventListener(KeyboardEvent.KEY_DOWN, function(e:KeyboardEvent):void {
                switch (e.keyCode) {
                case 67:
                    //c
                    g.beginFill(0xffffff);
                    g.drawRect(0,0,w,h);
                    g.endFill();
                    break;
                case 86:
                    g.lineStyle(2, ColorUtil.randomRGB(),1,false,"normal",CapsStyle.ROUND,JointStyle.ROUND,3);
                    break;
                }

                trace(e.keyCode);
            });
            
        }


        private function setupCamera():void {
            
            video = new Video(camera.width*2, camera.height*2);
            video.attachCamera(camera);
            
        }


        private function loop(e:Event):void {

            srcbd.lock();
            viewbd.lock();
            greenbd.lock();
            bluebd.lock();
            
            srcbd.draw(video,mirrorMt);
            viewbd.draw(video,mirrorMt);
            greenbd.copyChannel(srcbd, rect, pt, BitmapDataChannel.GREEN, BitmapDataChannel.RED);
            bluebd.copyChannel(srcbd, rect, pt, BitmapDataChannel.BLUE, BitmapDataChannel.RED);
            bluebd.draw(greenbd, mt, ct, BlendMode.LIGHTEN);
            viewbd.draw(bluebd, mt,ct, BlendMode.SUBTRACT);
            
            viewbd.threshold(viewbd, rect, pt, ">", 0xff600000, 0xffffffff);
            viewbd.threshold(viewbd, rect, pt, "!=", 0xffffffff, 0xff000000);

            srcbd.unlock();
            viewbd.unlock();
            greenbd.unlock();
            bluebd.unlock();

            draw();
        }


        private function draw():void  {
            var r:Rectangle = viewbd.getColorBoundsRect(0xffffffff, 0xffffffff);
            if (r.x == 0 && r.y == 0) {
                g.moveTo(nowx,nowy);
                penFlag = false;
                return;
            } else {
            }

            if (!penFlag) g.moveTo(r.x, r.y);
            
            g.lineTo(r.x, r.y);
            penFlag = true;
            nowx = r.x;
            nowy = r.y;

        }
    }
}


トラックバック

このエントリーのトラックバックURL:
http://un-q.net/mt-tb.cgi/244

コメントを投稿

crossreview