home > 投稿 > ビットマップを切り替え表示する際の負荷の検討
2009/05/07

ビットマップを切り替え表示する際の負荷の検討


既にどこかで検証されてる気がものすごくしますが、
ビットマップをどんどん切り替えるような処理をするときに、どうするのが一番負荷が低いか、
3つの方法を比べてみました。

  • BitmapをaddChild、そしてremoveChild
  • Bitmap.bitmapDataを入れ替える
  • Graphics.beginBitmapFilldで塗る
結果、Bitmap.bitmapDataを入れ替える、が圧倒的に早そうです。

package {
	import flash.display.Bitmap;
	import flash.display.Graphics;
	import flash.display.Sprite;
	import flash.utils.getTimer;

	public class BitmapLoadTest extends Sprite
	{
		
		[Embed(source='../image.jpg')] private static const SampleImage:Class;
		private var img:Bitmap = new SampleImage();

		public function pen_BitmapLoadTest()
		{
			test_addChild(); // 24 
			test_swapBmpd(); // 6
			test_fillBmpd(); // 20
		}
		
		private var testTimes:int = 10000;
		
		private function test_addChild():void
		{
			var sTime:int = getTimer();
			
			for(var i:int=0; i<testTimes; i++)
			{
				addChildAt(img, 0);
				removeChild(img);
			}
			
			trace(getTimer() - sTime);
		}
		
		private function test_swapBmpd():void
		{
			var bmpCon:Bitmap = new Bitmap();
			addChild(bmpCon);
			
			var sTime:int = getTimer();
			
			for(var i:int=0; i<testTimes; i++)
			{
				bmpCon.bitmapData = img.bitmapData
			}
			
			trace(getTimer() - sTime);
			
			removeChild(bmpCon);
		}
		
		private function test_fillBmpd():void
		{
			var g:Graphics = graphics;
			var w:int = img.width;
			var h:int = img.height;
			
			var sTime:int = getTimer();
			
			for(var i:int=0; i<testTimes; i++)
			{
				g.clear();
				g.beginBitmapFill(img.bitmapData);
				g.drawRect(0, 0, w, h);
				g.endFill();
			}
			
			trace(getTimer() - sTime);
		}
	}
}

トラックバックURL

http://faces2.bascule.co.jp/mt/mt-tb.cgi/590

コメントを投稿

(コメントには承認が必要になることがあります。承認されるまではコメントは表示されません。)