VB2008
現在、PictureBoxにDrawLineで入力データから
一つ前の入力データまで線を引き、
折れ線グラフを書いています。
左端から描画を開始し、折れ線が右端にきたら
PictureBoxのサイズを変更してスクロールするように
していますが、PictureBoxのサイズが大きくなってくると
表示がカクカクとなり、CPU使用率も100%になってしまいます。
過去の折れ線グラフも確認したいので、スクロールバーで
過去のグラフも確認できるようにしたいです。
これらの内容を高速に処理するためには、どのような方法が
良いのかご教示をお願い致します。
見える範囲のみ描画対象とするとか
http://bbs.wankuma.com/index.cgi?mode=al2&namber=14280&KLOG=31
メモリ上のBitmapで描画しておいてから、最終的にPictureBoxに
割り当てた方が、描画は速いかもしれない
この方法なら再描画の事とかも考えなくて良いしね
詳しくはヘルプのBitmapクラス、メンバを参照
やじゅさん、あさん
ご回答ありがとうございます。
今はBitmapに現在のPictureBox折れ線画像を保存し、
PictureBoxのサイズを1pixel増やして
PictureBoxにBitmapの画像を貼り付けてから
1データの線を描画するというのを繰り返していますが
データが増えてくると処理ができないみたいです。
1データに付き1pixel増やすことで
Bitmapデータが大きくなりすぎて
処理が追いつかないのではと感じております。
現在のデータは30msで入ってきており、
Bitmapのサイズは縦200横300からスタートして
横が2500付近になるとCPUの使用率が
100%になってしまいます。
あさんの言われていることを
現在は実施していると思います。
やじゅさんの見える範囲のみ描画対象
というのが実施できてませんし、内容が
理解できかねていますので、
詳しく教えていただけますか?
よろしくお願い致します。
>やじゅさんの見える範囲のみ描画対象
>というのが実施できてませんし、内容が
>理解できかねていますので、
>詳しく教えていただけますか?
過去のデータを見たいからといって、PictureBoxのサイズを
変更するのではなく、PictureBoxのサイズは固定として、
スクロールバーの移動イベント等により、描画の開始位置
を計算して見えている範囲のみ描画するようにします。
見えてない範囲のデータはメモリ上にでも保持しておきます。
リアルタイムでデータが増えていくのか…
そんでもってスクロールもしたいと…
んー…ある程度以上のデータは(Bitmap上から)捨てるようにしないと、
厳しいかも
捨てる場合はDrawImageで部分的に他のBitmapに移せば大丈夫だと思う、たぶん
捨てた部分を後で見られるようにする場合は
専用のモードでも作って全体を再描画しなおした方がいい気も
(データ自体は全部残してるよね?)
お返事が遅くなり申し訳ありません。
データのほうはCSVで吐き出して、
それをスクロールバーの移動イベント等で
参照させて描画させてみたいと思います。
業務の関係で、しばらく手にかけられない
ので、時間を作って少しずつやってみたいと
思います。
やじゅさん、あさん
この度はご回答ありがとうございました。
また、つまづいた時は質問したいと思いますので
よろしくお願い致します。
ツイート | ![]() |