入力データから折れ線グラフを高速に表示するには?

解決


yuki  2008-08-28 01:51:57  No: 140297

VB2008
現在、PictureBoxにDrawLineで入力データから
一つ前の入力データまで線を引き、
折れ線グラフを書いています。

左端から描画を開始し、折れ線が右端にきたら
PictureBoxのサイズを変更してスクロールするように
していますが、PictureBoxのサイズが大きくなってくると
表示がカクカクとなり、CPU使用率も100%になってしまいます。
過去の折れ線グラフも確認したいので、スクロールバーで
過去のグラフも確認できるようにしたいです。

これらの内容を高速に処理するためには、どのような方法が
良いのかご教示をお願い致します。


やじゅ  2008-08-28 02:36:49  No: 140298

見える範囲のみ描画対象とするとか
http://bbs.wankuma.com/index.cgi?mode=al2&namber=14280&KLOG=31


  2008-08-28 17:29:40  No: 140299

メモリ上のBitmapで描画しておいてから、最終的にPictureBoxに
割り当てた方が、描画は速いかもしれない
この方法なら再描画の事とかも考えなくて良いしね
詳しくはヘルプのBitmapクラス、メンバを参照


yuki  2008-08-29 03:51:40  No: 140300

やじゅさん、あさん
ご回答ありがとうございます。

今はBitmapに現在のPictureBox折れ線画像を保存し、
PictureBoxのサイズを1pixel増やして
PictureBoxにBitmapの画像を貼り付けてから
1データの線を描画するというのを繰り返していますが
データが増えてくると処理ができないみたいです。

1データに付き1pixel増やすことで
Bitmapデータが大きくなりすぎて
処理が追いつかないのではと感じております。

現在のデータは30msで入ってきており、
Bitmapのサイズは縦200横300からスタートして
横が2500付近になるとCPUの使用率が
100%になってしまいます。

あさんの言われていることを
現在は実施していると思います。

やじゅさんの見える範囲のみ描画対象
というのが実施できてませんし、内容が
理解できかねていますので、
詳しく教えていただけますか?

よろしくお願い致します。


やじゅ  2008-08-29 08:11:18  No: 140301

>やじゅさんの見える範囲のみ描画対象
>というのが実施できてませんし、内容が
>理解できかねていますので、
>詳しく教えていただけますか?

過去のデータを見たいからといって、PictureBoxのサイズを
変更するのではなく、PictureBoxのサイズは固定として、
スクロールバーの移動イベント等により、描画の開始位置
を計算して見えている範囲のみ描画するようにします。
見えてない範囲のデータはメモリ上にでも保持しておきます。


  2008-08-29 17:41:45  No: 140302

リアルタイムでデータが増えていくのか…
そんでもってスクロールもしたいと…
んー…ある程度以上のデータは(Bitmap上から)捨てるようにしないと、
厳しいかも
捨てる場合はDrawImageで部分的に他のBitmapに移せば大丈夫だと思う、たぶん
捨てた部分を後で見られるようにする場合は
専用のモードでも作って全体を再描画しなおした方がいい気も
(データ自体は全部残してるよね?)


yuki  2008-09-02 03:05:21  No: 140303

お返事が遅くなり申し訳ありません。

データのほうはCSVで吐き出して、
それをスクロールバーの移動イベント等で
参照させて描画させてみたいと思います。

業務の関係で、しばらく手にかけられない
ので、時間を作って少しずつやってみたいと
思います。

やじゅさん、あさん
この度はご回答ありがとうございました。

また、つまづいた時は質問したいと思いますので
よろしくお願い致します。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加