In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

カメラの映像を画像化してループ

カメラ映像から画像化するテスト。
画面をクリックすると画像化される。
とりあえずは、細かくずらして複製してる。
マスクしてみた。
 切り取った画像の表示位置をループさせてもみた。
 *****注意*****
画像が無限に重なるのでどこかでremoveした方がいいと思う。
 あと画像のエッジjがきたないので、もうちょっとべ調整してみよう。
テキストもフォント選ばないと切れたり、alignがcenter
Get Adobe Flash player
by hacker_KAZURO 20 Feb 2009
    Embed
// forked from se_nakamura's forked from: forked from: flash on 2009-2-18
// forked from se_nakamura's forked from: flash on 2009-2-18
// forked from hacker_aqzeiers's flash on 2009-2-18
// カメラ映像から画像化するテスト。
// 画面をクリックすると画像化される。
// とりあえずは、細かくずらして複製してる。
//
// マスクしてみた。
// 切り取った画像の表示位置をループさせてもみた。
// *****注意*****
//画像が無限に重なるのでどこかでremoveした方がいいと思う。
// あと画像のエッジjがきたないので、もうちょっとべ調整してみよう。
// テキストもフォント選ばないと切れたり、alignがcenter

package {
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.display.BlendMode;
	import flash.events.MouseEvent;
	import flash.media.Camera;
	import flash.media.Video;

	import flash.text.*;

	import flash.utils.Timer;
	import flash.events.TimerEvent;

	import flash.display.BitmapDataChannel;
	import flash.geom.Point;
	import flash.geom.Rectangle;

	public class VideoCapMain extends flash.display.Sprite {
		var camera_width:int=160;
		var camera_height:int=120;
		var bitmap_x_offset:int=100;
		var bitmap_y_offset:int=100;

		var yCount:int=1;
		var xCount:int=1;

		var video:Video=new Video(camera_width,camera_height);
		var myClip:Sprite=new Sprite ();

		var maskObj:Sprite=new Sprite();
		var timer:Timer;
		//ループの間隔
		var loopTime:int=200;

		var my_txt:TextField;
		var my_fmt:TextFormat;
		//var my_fmt:TextFormatAlign


		public function VideoCapMain():void {
			//ボタンモードture
			myClip.buttonMode=true;
			//カメラを取得して表示
			var camera:Camera=Camera.getCamera();
			if (camera!==null) {
				video=new Video(160,120);
				video.attachCamera(camera);
				//video.visible=false;
				// ビデオをそのまま表示オブジェクトに
				//video.mask=maskObj;
				//addChild(video);

				//  マスクをかける
				myClip.mask=maskObj;//ここでまだ生成されていないmaskObjを使ってもマスクがかかるのはなぜ?
				myClip.addChild(video);//

				addChild(myClip);

			}
			//クリックするバージョンの時使う。
			myClip.addEventListener(MouseEvent.CLICK,onClick);

			//マスクオブジェ
			maskObj.graphics.clear();
			maskObj.graphics.lineStyle(0,0,0);
			maskObj.graphics.beginFill(0xffffff);
			maskObj.graphics.drawCircle(video.width/2,video.height/2,50);
			maskObj.graphics.endFill();
			//addChild(maskObj)
			//ループ
			timer=new Timer(loopTime);
			timer.addEventListener(TimerEvent.TIMER,loop);
			//timer.start();

			//
			//テキストフィールド
			my_txt= new TextField();
			//my_txt.autoSize = 'left';
			//my_txt.autoSize=TextFieldAutoSize.CENTER;
			my_txt.type=TextFieldType.DYNAMIC;

			my_txt.border=true;
			my_txt.borderColor=0x000000;
			my_txt.text="←映像をクリックしてスタート。"+loopTime/1000+"秒ごとに画像を表示";
			my_txt.x=200;
			my_txt.y=50;
			my_txt.width=my_txt.textWidth+100;
			my_txt.height=my_txt.textHeight+5;
			//
			my_fmt=new TextFormat();
			my_fmt.size=10;
			my_fmt.align="center";
			my_txt.setTextFormat(my_fmt);

			addChild(my_txt);

		}


		//
		//TimerLoop
		private function loop(event:TimerEvent):void {
			var bd:BitmapData=new BitmapData(160,120,true,0x000000);
			//BitmapDataにmyClipをdrawする。ここで画像を切り取っている?
			bd.draw(myClip);
			//切り取った画像をBitmapに入れている。
			var img:Bitmap=new Bitmap(bd);
			//(未解決)枠を消したい。
			//img.mask=maskObj;
			//img.blendMode=BlendMode.MULTIPLY;
			//
			//透明マップを読み込み
			/////-- var bmp:Bitmap = new Bitmap(bd);
			/*var bd2:BitmapData=new BitmapData(160,120,true,0x000000);
			bd2.draw(maskObj);
			
			var bmpAlpha:Bitmap=new Bitmap(bd2);
*/

			//不透明用
			//var bd2:BitmapData=img.bitmapData.clone();

			//透明化する
			/*img.bitmapData.copyChannel(bmpAlpha.bitmapData , bmpAlpha.bitmapData.rect , 
			                                                     new Point(0,0) , 
			                                                     BitmapDataChannel.ALPHA , 
			                                                     BitmapDataChannel.ALPHA);*/
			//
			//表示リストにくわえる
			addChild(img);
			if (yCount==1) {
				img.y=img.y+bitmap_y_offset*yCount;
				img.x=img.x+bitmap_x_offset*(xCount-1);
			} else {

				img.y=img.y+bitmap_y_offset*yCount;
				img.x=img.x+bitmap_x_offset*(xCount-1);
			}

			//クリックした回数
			yCount=yCount+1;
			//画像の表示位置をループさせてる。
			if (yCount>5) {
				yCount=1;
				yCount=yCount+1;
				img.y=bitmap_y_offset;
				img.x=bitmap_x_offset*xCount;
				xCount=xCount+1;
				if (xCount>5) {
					xCount=1;
					img.x=0;
				} else {

				}
			}
			trace("y"+yCount)
			trace("x"+xCount);
			trace(img.x);
		}
		//

		private function onClick(event:MouseEvent):void {
			timer.start();
			/*var bd:BitmapData=new BitmapData(200,150);
			//BitmapDataにmyClipをdrawする。ここで画像を切り取っている?
			bd.draw(myClip);
			//切り取った画像をBitmapに入れている。
			var img:Bitmap=new Bitmap(bd);
			//それを表示リストにくわえる
			//img.mask=maskObj;
			addChild(img);
			if (yCount==1) {
			img.y=img.y+camera_height*yCount;
			img.x=img.x+bitmap_x_offset*(xCount-1);
			} else {
			
			img.y=img.y+bitmap_y_offset*yCount;
			img.x=img.x+bitmap_x_offset*(xCount-1);
			}
			
			//クリックした回数
			yCount=yCount+1;
			//画像の表示位置をループさせてる。
			if (yCount>4) {
			yCount=1;
			yCount=yCount+1;
			img.y=camera_height;
			img.x=bitmap_x_offset*xCount;
			xCount=xCount+1;
			if (xCount>5) {
			xCount=1;
			img.x=0;
			} else {
			
			}
			}
			//trace("y"+yCount)
			trace("x"+xCount);
			trace(img.x);*/





			// ---------以下は未使用------------

			//クローン

			/*var copy_bmp : Bitmap= new Bitmap(myClipSet.bitmapData.clone());
			addChild(copy_bmp);
			copy_bmp.x=300;*/

			//--------ビットマップキャッシュにする方法
			/*myClip.cacheAsBitmap=true;
			maskObj.cacheAsBitmap=true;
			myClip.mask=maskObj;
			*/
			//-------------//

			// ビデオにマスク
			//myClip.mask=maskObj;

			//video.mask=maskObj;
			/*var maskbd:BitmapData=new BitmapData(camera_width,camera_height);
			
			maskbd.draw(maskObj);
			var maskImg:Bitmap=new Bitmap(maskbd);*/

			//img.mask=maskObj;
			//maskImg.mask=maskObj;

			//img.mask=maskImg;



			/*フィルタを適用する範囲,位置を指定するための情報を準備
			var rect:Rectangle=new Rectangle(0,0,maskbd.width,maskbd.height);
			
			
			bd.copyChannel(maskbd, rect, new Point(0, 0), BitmapDataChannel.ALPHA, BitmapDataChannel.ALPHA);
			
			*/
			//

			/*if (bitmap_y_offset>=stage.stageHeight) {
			bitmap_count+=1;
			
			//bitmap_x_offset+=205;
			bitmap_y_offset=0;
			img.x=bitmap_x_offset;
			img.y=bitmap_y_offset;
			
			trace("C");
			
			*/
			/*} else {
			//img.x = 0;
			img.x=bitmap_x_offset*bitmap_count;
			img.y=bitmap_y_offset;
			bitmap_y_offset=bitmap_y_offset+155;
			trace("a");
			*/

			//trace(bitmap_y_offset);
		}
	}

}