qgmap 開発メモ – 拡大処理を実装

QImage の scanLine を直接書き換えることで拡大する処理を書いてみた。整数倍だけなので簡単に書けた。

時間を測ってみると、倍率によらず 6~7ms 位。 QPixmap::xForm() は 36ms~122msなので比較にならないくらい速い。

拡大の有無にかかわらず、画像1枚あたり 80 ~ 120ms 程度でロードできるようになった。

あと、QPixmapCache を使ってキャッシュしてるつもりだったんだけど、キャッシュサイズがデフォルトでは 1MB らしい。地図1枚で 256x256x4byte=256kB だから、4枚しかキャッシュできてなかった。VGA1画面では最大 12枚の地図が必要なので、全くキャッシュの意味がなかったということに。照れる

とりあえず 8MB (=地図32枚分) に増やしてみたところ、確かに動作が軽くなった。

拡大処理の独自実装と、キャッシュの拡大で体感で分かるほどスクロールがスムーズに。まぁ、一応実用レベルなのかなぁ。個人的にはまだ引っかかる感じは気に入らないけど。

ソースを整理したらリリースします。

関連した記事:


2 comments

  1. qgmapの開発記事を興味深く読ませて頂いています。

    自分の作ってるZegaだと地図画像がもっさり動くのが気になっていたのですが、bucchiさんの記事やプログラムソースを見てパフォーマンス改善の糸口が見えたような気がします。 (^^

    • コメントありがとうございました。

      Zega の作者様からコメントいただけるとは思ってもいませんでした。(汗

      実は画像ロード関係の高速化を始めたきっかけは、GM_Lite に対応された Zega を使ってみて、地図の読み込みが速かったのがきっかけだったりします。

      高速化にあたり、私も Zega のソースをこっそり参考にさせて頂きました (^^;

      コメント頂けてなんだかやる気が出てきました。ありがとうございます!

コメントを残す

メールアドレスが公開されることはありません。


*