• ベストアンサー

ActionscriptのBitmapDataの描画速度

BitmapDataクラスを使って単色で塗りつぶしたのですが、 以下の二つの方法で試して速度を比較してみました。 1)各ピクセル毎にループさせて、setPixel(x, y, color)で各ピクセルを塗りつぶした。 2)fillRect(rect, color)で一気に塗りつぶした。 結果は、2)の方が断然速く処理しました。なぜ塗りの速度が全然違うのでしょうか?fillRectの中では何が行われているのでしょうか? ご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • atse
  • ベストアンサー率83% (36/43)
回答No.2

ループによるsetPixel()は、毎回そのピクセルのカラー情報を取得し、それにあわせて実際に塗られるカラーを毎回再計算します。 fillRect()は、おそらく最初にそのBitmapData自身が24bitか32bitかを判断するだけで、実際塗られるカラーの計算も最初の1回のみと思われます(24bitカラーによる塗り潰しの違いから推測、わかりやすく言うと上書き)。 もう一つは、setPixel()は実行するごとに毎回、つまりループで100回マスを塗ったとしたら100回、その関連するオブジェクトに「情報が変わったよ」と、教えます。 (一応AS3.0からはlock()/unlock()で制御できます) 以上がsetPixelが遅くなる大きな理由だと思われます。

rivertk
質問者

お礼

回答ありがとうございます。 よくわかりました。 ピクセル単位で操作する時は lock()/unlock()を使おうと思います。

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

Flash に限らず,普通はそうじゃないでしょうか? 1個ずつ,それもひっついているものをわざわざわけて操作するより, ひとまとめで操作した方が速いでしょう。 例えば「文書A(文字列A)」を「文書B」に貼り付けるとき, そのデータを,1文字ずつ 捜査してピックアップ するより, ~~~~~~~~~~~~~~~~~~~ 全部選択して貼り付ける方が速いです。 そうでない方が変だと思いますけどね。 それを不思議に思いだしたら, PCすべての機能が不思議に思えると思います。 (別に PC に限定する必要もありませんが。)

rivertk
質問者

お礼

回答ありがとうございます。 参考にさせていただきます。

関連するQ&A