忍者ブログ
個人HP After Cider の管理人、 ほねっとのブログです。 なのはプロジェクトとか大好きです。 八神はやてが大好きな管理人です。 コメント歓迎です!
[207] [206] [205] [204] [203] [202] [201] [200] [199] [198] [197]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

前のエントリで書きました、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で描画すればいいだけなので
楽ちん!とおもったのですが、あれ?時間がかかる?

私が引っかかったところはメモリの確保時間の部分にありました。
アイコンの画像はすでに読み込んでいたので、
すでに読み込んだLoader ->  new BitmapData -> new Bitmap
という風にデータを作っていました。

しかし、これでやると15秒→12秒程度と、大して変わらない…

どういうことかなと考えてみると、BitmapDataはすでに作ってあるのでこれを新たに作る必要は
ないわけです。
ということで、すでに作っていたBitmapData -> new Bitmap
とすることにしました。すると3秒ぐらい!はやーい!

ということで素早い表示が可能になりまs・・・いや、これでもまだ不自然です。


次回はプロセスが独占することなく、描画スレッドをきちんと働かせて順次アイコンを表示するように
していこうと思います。あと、アイコンが綺麗に動くようにしたいです。


ではでは!
PR

コメント


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


トラックバック
この記事にトラックバックする:


忍者ブログ [PR]
カレンダー
04 2018/05 06
S M T W T F S
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
フリーエリア
最新CM
プロフィール
HN:
ほねっと
性別:
非公開
自己紹介:
ついったーはこちらです!
http://twitter.com/aftercider
バーコード
ブログ内検索
カウンター
アクセス解析