QImage の scanLine を直接書き換えることで拡大する処理を書いてみた。整数倍だけなので簡単に書けた。
時間を測ってみると、倍率によらず 6~7ms 位。 QPixmap::xForm() は 36ms~122msなので比較にならないくらい速い。
拡大の有無にかかわらず、画像1枚あたり 80 ~ 120ms 程度でロードできるようになった。
あと、QPixmapCache を使ってキャッシュしてるつもりだったんだけど、キャッシュサイズがデフォルトでは 1MB らしい。地図1枚で 256x256x4byte=256kB だから、4枚しかキャッシュできてなかった。VGA1画面では最大 12枚の地図が必要なので、全くキャッシュの意味がなかったということに。
とりあえず 8MB (=地図32枚分) に増やしてみたところ、確かに動作が軽くなった。
拡大処理の独自実装と、キャッシュの拡大で体感で分かるほどスクロールがスムーズに。まぁ、一応実用レベルなのかなぁ。個人的にはまだ引っかかる感じは気に入らないけど。
ソースを整理したらリリースします。
qgmapの開発記事を興味深く読ませて頂いています。
自分の作ってるZegaだと地図画像がもっさり動くのが気になっていたのですが、bucchiさんの記事やプログラムソースを見てパフォーマンス改善の糸口が見えたような気がします。 (^^
コメントありがとうございました。
Zega の作者様からコメントいただけるとは思ってもいませんでした。(汗
実は画像ロード関係の高速化を始めたきっかけは、GM_Lite に対応された Zega を使ってみて、地図の読み込みが速かったのがきっかけだったりします。
高速化にあたり、私も Zega のソースをこっそり参考にさせて頂きました (^^;
コメント頂けてなんだかやる気が出てきました。ありがとうございます!