閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

やっぱり DrawLines 遅い

同じ点数*1で Polyline(Win32API) と Graphics::DrawLines (GDI+) とで線を描いてみたけれど、後者が圧倒的に遅い。 3 秒くらいかかってしまう。これはまずいなあ。なんとかならないかな。

追記

描画対象を TImage から TPaintBox に変更したらそこそこ早くなりました。 TImage(VCL) 側にネックがあるのかなあ。そっちのソースも読んでおくか……。

大分速くなったとはいえ、それでもまだ差があるのでもう少し突き詰めてみよう。色々オーバヘッドがかかってしまう分パフォーマンスが落ちるのは仕方ないと思いますが、できれば体感できないくらいに抑えたいところ。

追記(2)

ソース読んだとこでは TImage::Canvas は TBitmap のもので、 TPaintBox::Canvas は普通のキャンバスになっているらしい。ビットマップへの描画が遅いということなのかな。とりあえず後者なら多少マシにはなるらしい。

ビットマップへの描画が遅いのも問題だけれどまあこれはいいや。本番ではデバイスコンテキストに書いちゃうし。

*1:4000 点ほど