« SUNQパス | メイン | 北部九州遠征〜(1)久々の別府温泉 »
2006年10月20日
FSディザリング on gdlib |
出陣。gd2.0.xの高速化実装。プロファイラgprofを使ってどの関数が遅い(時間がかかる)のか調査。まずはlibpng内のPNG画像生成部門が遅いようだ。ついでフルカラー(TrueColor)をパレットカラー(256色)に減食する処理が遅いようだ。 libpngはいじらないほうがよさそうなのでひとまずペンディングとし、gdライブラリのgdtopal.cのFSディザリング処理をチューニング。
その後、FSディザ以外に選択肢はないのか調べたところ、同ディザリング処理をしない方法(ノーマル?)もあるようだ。デフォルトではFSになっている。コードを書き換えてみた。PNGのほか従来のGIFでも出力させたが、FSに比べ、色の拡散が少ないのできれいに見える。 問題は減色時にオリジナルのRGB値を尊重してくれないことが多いことだ。微妙にRGB値が変わってしまう。かといってパレットを使いきったわけでもない。これはいったいどういうことだろうか。
しばし考えた末、あらかじめメジャーな(使うことが明らかな定義済みの色)色は、減色に先駆けて割り当ててしまい、優先的にその色を使うように改修してみた。gdライブラリのヘッダgd.hに別途パレット領域を追加。数種類のRGBを固定で割当るよう実験的コーディングを行い、試してみたところ、期待通り色が割り当てられた。 減色ルールにかんしてはこの手法は使えそうである。 あいかわらず全体として処理が遅いのがネックである。
2007:
投稿者 onsenfan [ プログラミング ] : 2006年10月20日 23:48
この記事が役に立った/おもしろいと思ったら、ワンクリックで応援お願いします
トラックバック
このエントリーのトラックバックURL:
http://blog.odorokutamegoro.com/cgi-bin/mt/mt-tb.cgi/1605_3851852663360