Home > ActionScript 3.0 > AS3.0 Bitmap系チューニングのための速度検証

AS3.0 Bitmap系チューニングのための速度検証

最近Webカメラを使っていろいろやっているわけですが
Webカメラって、fpsがちょっとでも下がったり
一瞬でも描画が止まったりするとすごい違和感を感じてしまう。
そのためBitmap系の実装にはかなり気を使ってしまいます。

今日はそんな中で調べた一部のメソッドの速度検証の結果をご報告。


今やっていることは、Webカメラをそのまま反映したレイヤーの上に
その映像を処理した別のBitmapDataを重ねるといった事をやっています。
(以後、この処理したBitmapDataをエフェクトと呼ぶことにします。)

この処理をするときに、毎フレームエフェクトをリセット
つまり、何も無い状態(色で言えば0x00000000とか)にする必要があるのですが
最初は、毎フレーム

// 既にある場合はメモリから削除する.
if( effectBmp != null ){
    effectBmp.dispose();
}
effectBmp = new BitmapData( 100, 100, true, 0x00000000 );

とかやっとったわけですが、new はけっこう遅いんではないかと思い始め
予め何も無い状態のBitmapData( 以後 空画像 )を用意して
clone で複製しちゃったほうが早いんじゃないかとか
いろいろ考えて悶々としてしまったので、とにかく調べてみようと思い
実際に速度検証してみました。

検証のために調べたのは、とりあえず以下の3つ

1. new する

毎回 new BitmapData で作り直す方法。
effectBmp = new BitmapData( 100, 100, true, 0x00000000 );

2. clone で空画像を複製

毎回 clone メソッドで空画像の複製をもらう方法。
effectBmp = 空画像.clone();

3.copyPixels で空画像の画素ごっそりコピー

読んで字の如く,copyPixelsでまるまる画素をコピーしちゃう方法。
effectBmp.copyPixels( 空画像,
    new Rectangle( 0, 0, 100, 100 ), new Point() );


これらを系10000回ずつfor文でまわしてみるという単純なテストです。
あんまり差は無いだろうなあ・・・と思いつつやってみた結果が以下です。

--------------------------------------------
1. new する
result --- 750ms

2. clone で空画像を複製
result --- 1000ms

3.copyPixels で空画像の画素ごっそりコピー
result --- 156ms
--------------------------------------------

正直びびりました、copyPixels鬼早いじゃないか!!5倍も差が・・・
今まで new しまくってたのがアホみたいだ orz =3

Webカメラなんで、画素数も変わらないし
この方法はなかなか良いのではないでしょうか、先生!!(誰だ)

余談ですが、copyPixels の引数の Rectangle と Point を
毎回関数呼び出すときに new してたので、やっぱそこも勿体ないと思い
予め定義してあげて、それを使ったら 140ms になりましたとさ。

Comments:0

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Trackbacks:0

TrackBack URL for this entry
http://blog.flair4.jp/mt/mt-tb.cgi/33
Listed below are links to weblogs that reference
AS3.0 Bitmap系チューニングのための速度検証 from flair4 blog

Home > ActionScript 3.0 > AS3.0 Bitmap系チューニングのための速度検証

Search
Feeds

Return to page top