AS3:カメラとビットマップとマスク。ややこしいから。

1.WEBカメラでFlashにビデオ表示

2.丸いマスクをかける(切り抜いたような感じ)

3.クリックすると画面をスクリーンショットの様に画像化。

4.ずらして連続写真のように並べていく。

ActionScript 3.0の勉強中。

参考にさせていただいたのは、
AS3でWebカメラの映像をJPEGで保存
です。
あれそのままか?いやマスクをかけたいんです。

まず、カメラの取得
*マスクの元になるmaskObjはどこかで作っておいてくださいね。

var camera:Camera=Camera.getCamera();
if (camera!==null) {
video=new Video(160,120);
video.attachCamera(camera);
//  マスクをかける
myClip.mask=maskObj;
myClip.addChild(video);
addChild(myClip);
}



マスクしたカメラ映像myClipを画像化するには
var bd:BitmapData=new BitmapData(200,150); 
  
  bd.draw(myClip);  
  
  var img:Bitmap=new Bitmap(bd);  //Bitmapに入れる
  
  addChild(img); //表示リストに加える

あとはimg.xとかで表示する座標を加えてください。
--

あとBitmapには直接マスクがかけれないので、そのあたりでつまづきました。
まぁBitmapDataとBitmapのこの二つの仕組みがよく分からなくって。
SpriteやMovieClipやVideoは直接マスクがかけられるんです。
こんな感じでOKなの。
 
 mySprite.mask=maskObj;
 myMovieClip.mask=maskObj;
 myVideo.mask=maskObj;


でもBitmapはできない。Bitmapも同じ表示オブジェクトけど・・なんで?
mixiで詳しい人がコメントしてくれて、マスクが有効かどうかははDisplayObjectContainer(表示オブジェクトコンテナ)がからんでいるとのこと。
Bitmapにマスクするには表示オブジェクトコンテナを継承しているSpriteやMovieClipにaddChildすることで、やっとマスクを有効にできる。
ややこしいね。

Flashのリファレンスみると

flash.display
Bitmap → DisplayObject
Sprite → DisplayObjectContainer → InteractiveObject→ DisplayObject


って書いてある。
DisplayObjectContainerが違いますね。
じゃ、Videoは?というと

flash.media
Video → DisplayObject


あれ?DisplayObjectContainerは絡んでないよ?
でもVideoは表示オブジェクトコンテナを継承してないど、

 myVideo.mask=maskObj;

って感じで直接マスクができるのよ。

なんで?っていわれてもよく分かんなくってdisplayかmediaの違いとしか理解してません冷や汗
とにかくBitmapがややこしい存在なんだなと思えばいいかな。

なんだかんだでVideoをSpriteに入れて、それにマスクをかけたんで、
Bitmapにマスクすることはしなかったんだけどね。


at 11:06, 浅井カズヒロ, ActionScript

comments(0), -, pookmark