as3でWebカメラ画像の取り込みの練習
4月 8th, 2008 admin Posted in Flash, 今日のコード |
話が逆な気もするけど「Flash+WebCam+Web」って凄い組み合わせだと思う。
今後数年以内に爆発的に流行ると思うので今から取り込みの練習。
ビデオを取得してそれをビットマップにすればいいらしい。
成果物
買ったし安くなかった割に読んでない本を自慢できるswf

画面をクリックする度にWebカメラの画像が取り込まれて下につながっていく。それだけ。
コード
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.MouseEvent; import flash.media.Camera; import flash.media.Video; import flash.text.TextField; public class Main extends flash.display.Sprite { private var camera_width:int = 200; private var camera_height:int = 150; private var bitmap_y_offset:int = 160; private var video:Video = new Video(camera_width, camera_height); private var tfView:TextField; public function Main():void { tfView = addTextField(220, 0, 200, 150); tfView.appendText("start\n"); var camera:Camera = Camera.getCamera(); if (camera == null) { //error return; } video.attachCamera(camera); addChild(video); stage.addEventListener(MouseEvent.CLICK, onClick); } private function onClick(event:MouseEvent):void { tfView.appendText("click!\n"); var bd:BitmapData = new BitmapData(camera_width, camera_height) bd.draw(video); var img:Bitmap = new Bitmap(bd); addChild(img); img.x = 0; img.y = bitmap_y_offset; bitmap_y_offset += bitmap_y_offset; } private function addTextField(x:Number, y:Number, w:Number, h:Number):TextField { var textField:TextField; textField = new TextField(); addChild(textField); textField.x = x; textField.y = y; textField.width = w; textField.height = h; textField.text =""; textField.selectable=true; textField.border =true; return textField; } } }
まとめ
次はサーバにアップロードされるようにしたいと思う。そうすればサイトにアクセスしてWebカメラをポンとクリックしてスマートURLが発行されて友達に送れるっていう、お前なんかいてもいなくても同じなWebサービスの完成です。
疑問
videoのCLICKイベントを拾いたかったけど拾えなかった、どうやってやるんだろうか?
参考サイト
Flash Player 9/ActionScript3.0/Flex2の勉強日記
AS3でDisplayObjectをBitmapDataに変換してみたよ。 - Humming Via Kitchen
4月 9th, 2008 at 9:53:17
Spriteなどに入れ子にして親Spriteでclickイベントを拾うのがよいのではないでしょうか。Videoクラスを拡張しても実現できるとは思いますが、そこまでするまでもないかなと。