as3でWebカメラ画像の取り込みの練習

4月 8th, 2008 admin Posted in Flash, 今日のコード |

話が逆な気もするけど「Flash+WebCam+Web」って凄い組み合わせだと思う。
今後数年以内に爆発的に流行ると思うので今から取り込みの練習。
ビデオを取得してそれをビットマップにすればいいらしい。

成果物

買ったし安くなかった割に読んでない本を自慢できるswf
flash.jpg
画面をクリックする度に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

One Response to “as3でWebカメラ画像の取り込みの練習”

  1. Spriteなどに入れ子にして親Spriteでclickイベントを拾うのがよいのではないでしょうか。Videoクラスを拡張しても実現できるとは思いますが、そこまでするまでもないかなと。

Leave a Reply