ほねっとのブログです。プロジェクトとか大好きです。八神はやてが大好きな管理人です。ないブログに表示されています。新しい記事を書く事で広告が消えます。】CATEGORY[]TwiconPic高速化のために前のエントリで書きました、TwiconPic、大きな問題点として対象となる絵を描画するまでに時間が20秒程度かかるという点がありました。原因として、1.元になる絵の画素(約1万個)それぞれの色に近いアイコンを探す際に、画素1つ1つにおいて、すべてのアイコン(約500個)に対して画素距離求めるため、計算が非常に時間がかかる(約10秒)2.アイコンをポリゴンに貼りつけてPapervision3Dで1つ1つ表示していったために、メモリの確保やポリゴン(約1万個)の描画に時間がかかる(約15秒)&画面スクロールや拡大に時間がかかるというのがありました。このままではアイコンの読み込みが終わった後、アイコンで絵を描くまでに30秒近くプロセスを占有してしまい、Flashどころかブラウザも止まってしまうのでいけません!そこで、対処法をLarkさん(http://d.hatena.ne.jp/Lark_mp/)に相談したところ、1.について以下の方法を適用してみました。1.アイコン1つ1つには画像全体の画素のRGBそれぞれの平均値があります。それをRについてバケツソートを行います。2.バケツソートができたら、元画像の対象点の画素のRのバケツに入っているアイコンについて最短距離を求めます。3.最短距離が出たら対象点の画素のR±最短距離の範囲のバケツに入っているアイコンについてRに近いバケツからチェックして最短距離を更新していきます。4.真の最短距離がでたらおしまい!こうすることで、0≦R<256の範囲でこれまで計算していたのがたとえば100≦R≦110とかの短い範囲で計算が終わったりできて高速化ができる寸法です!言葉で説明しにくいー><これをやることで、10秒かかっていた計算処理がソートの時間も込みで2秒弱に収まるようになりました。よかったよかった!そして、問題2.のほうですが、単にPapervision3Dをやめて普通のSpriteで描画すればいいだけなので楽ちん!とおもったのですが、あれ?時間がかかる?私が引っかかったところはメモリの確保時間の部分にありました。Bitmapという風にデータを作っていました。これでやると15秒→12秒程度と、大して変わらない...どういうことかなと考えてみると、BitmapDataはすでに作ってあるのでこれを新たに作る必要はないわけです。Bitmapとすることにしました。すると3秒ぐらい!はやーい!ということで素早い表示が可能になりまs・・・いや、これでもまだ不自然です。次回はプロセスが独占することなく、描画スレッドをきちんと働かせて順次アイコンを表示するようにしていこうと思います。あと、アイコンが綺麗に動くようにしたいです。)カウンターアクセス。