BitmapとBitmapDataは画像処理を行うためのクラス。
ちょっと工夫すると面白い表現もできる。
Bitmap.draw()を使ってみる1
まずは基本中の基本。
stageに描いたものをそのまま、bitmapに書き込む。
ただし、そのままだとbitmap自体もstageにあるので、bitmapもまた書き込んでしまう。一度真っ白にしてから、stageに書き込んでいる。
1 2 3 4 |
//一度、真っ白に戻している。 _bitmap.bitmapData.fillRect(_bitmap.bitmapData.rect,0xFFFFFF); //stageの内容を書き込んでいる。 _bitmap.bitmapData.draw(stage); |
「一度、真っ白に戻している。」の処理がぴんとこない場合は、
//_bitmap.bitmapData.fillRect(_bitmap.bitmapData.rect,0xFFFFFF);
とコメントアウトして試してみるといいかも。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
/* Bitmapにstageの絵柄を書き込む。 Spriteが一つしか無いのに、 画面上には二つある。 左側はSpriteを描いて回転させたもの。 右側はstageに描かれている絵柄を Bitmapに転写したもの。 */ package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; public class Main extends Sprite { private var _sp:Sprite; private var _bitmap:Bitmap; public function Main() { _sp = new Sprite(); _sp.graphics.beginFill(0xFF0000,0.5); _sp.graphics.drawRect(0,0,100,100); _sp.graphics.endFill(); _sp.x=100; _sp.y=200; this.addChild(_sp); //bitmapの表示エリアを作っている。 var bitmapData:BitmapData=new BitmapData(232,465); _bitmap=new Bitmap(bitmapData); _bitmap.x=232; this.addChild(_bitmap); this.addEventListener(Event.ENTER_FRAME,onEnter); } private function onEnter(event:Event):void { //Spriteを回転 _sp.rotation++; //一度、真っ白に戻している。 _bitmap.bitmapData.fillRect(_bitmap.bitmapData.rect,0xFFFFFF); //stageの内容を書き込んでいる。 _bitmap.bitmapData.draw(stage); } } } |
Bitmap.draw()を使ってみる2
残像が残ったような表現。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
/* Bitmapにstageの絵柄を書き込む。 直前に描いた画像をちょっとずつ暗くすると、 残像が残ったようにみえる。 */ package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.geom.ColorTransform; import caurina.transitions.Tweener; public class Main extends Sprite { private var _sp:Sprite; private var _bitmap:Bitmap; private var _colorTransform:ColorTransform; public function Main() { _sp = new Sprite(); _sp.graphics.beginFill(0xFF0000,1); _sp.graphics.drawRect(100,0,100,100); _sp.graphics.endFill(); _sp.x=stage.stageWidth/2; _sp.y=stage.stageHeight/2; this.addChild(_sp); //bitmapの表示エリアを作っている。 var bitmapData:BitmapData=new BitmapData(stage.stageWidth,stage.stageHeight); _bitmap=new Bitmap(bitmapData); this.addChild(_bitmap); //変色の内容。ちょっとだけ暗くしている。 _colorTransform = new ColorTransform(1, 1, 1, 1, -0x5, -0x5, -0x5); this.addEventListener(Event.ENTER_FRAME,onEnter); } private function onEnter(event:Event):void { //Spriteを回転 _sp.rotation++; //一度、真っ白に戻している。 //_bitmap.bitmapData.fillRect(_bitmap.bitmapData.rect,0xFFFFFF); //前に描いた画像を変色している。 _bitmap.bitmapData.colorTransform(_bitmap.bitmapData.rect,_colorTransform); //_bitmap.bitmapData.scroll(1,1); //stageの内容を書き込んでいる。 _bitmap.bitmapData.draw(stage); } } } |
[おまけ]Bitmap.draw()の例
いろいろ組み合わせると、こういうのとか、もっと手の込んだのも作れるはず。