0

注釈ビデオプレーヤーを作成する必要があるプロジェクトに取り組んでいます!

基本的に、私はこのチュートリアル [1] に従いました。ここでは、作者が Flex を使用して独自の Web カメラで (この場合は単なる四角形) を描画する方法を示しています。

すべてうまくいきましたが、今度はリスナーを追加して画像のスナップショット (描画したものと Web カメラの画像) を取得し、コンピューターに保存したいと考えています。

リスナーを作成しましたが、問題は、このリスナーが描画なしで Web カメラからの画像のみを保存することです (その描画をカメラに追加したにもかかわらず)。

private function save():void {

    var bitmapData:BitmapData = new BitmapData(videoDisplay.width,videoDisplay.height);
    bitmapData.draw(videoDisplay);

    var ba:ByteArray = (new PNGEncoder()).encode(bitmapData);
    (new FileReference()).save(ba, "doodle.png");       
}

Flex/Flash の経験がまったくないので、間違っていたのかもしれません。

手伝ってくれませんか?

[1]http://narinderkumar.wordpress.com/2012/02/16/drawing-on-live-video-in-flex/

4

1 に答える 1

0

この例は問題なく動作します - あなたのコードスニペットには問題が見られませんが、ビデオに vis グラフィックを描画しているだけかもしれません。その場合、グラフィックレイヤーはカメラの後ろにあります...帽子が役立つことを願っています;)

package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.media.Camera;
    import flash.media.Video;

    public class cameratest extends Sprite
    {
        private var holder:Sprite;
        private var layover:Sprite;
        private var display:Sprite;

        public function cameratest()
        {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align     = StageAlign.TOP_LEFT;

            var cam:Camera = Camera.getCamera();
            var video:Video     =new Video(cam.width, cam.height);
            video.attachCamera(cam);

                    //holder hollds the video and on top the layover to draw on
            holder = new Sprite();
            stage.addChild(holder);
            holder.addChild(video);

            //layover to draw on                
            layover = new Sprite();
            holder.addChild(layover);

            //will show the snapshot
            display = new Sprite();
            display.x= 350;
            stage.addChild(display);

            //listener for onclick do snapshot
            stage.addEventListener(MouseEvent.CLICK, drawAndSave);
        }
        private function drawAndSave(E:Event=null):void{
            layover.graphics.beginFill(0xff0000,1);
            layover.graphics.drawCircle(10,10,10);

            var bmd:BitmapData=new BitmapData(holder.width,holder.height);
            bmd.draw(holder);

            var bmp:Bitmap = new Bitmap(bmd,'auto',true);
            display.addChild(bmp);
        }
    }
}
于 2012-09-23T14:22:22.960 に答える