System.Drawing を使用して少しグラフを作成していますが、いくつかの問題があります。
私はキューにデータを保持しており、そのデータを 3 つのピクチャ ボックスに描画 (グラフ化) しています。
このメソッドは、画像ボックスを塗りつぶしてから、グラフをスクロールします。
前の図面の上に描画しないように (そして徐々に乱雑に見えるように)、グラフを描画するための 2 つの解決策を見つけました。
plot.Clear(BACKGOUNDCOLOR)
描画ループの前に呼び出す [ブロック コメント]
これにより、実際の描画ループを実行するのにかかる時間からちらつきが発生します。
plot.DrawLine(channelPen[5], j, 140, j, 0);
各ドローラインの直前に呼び出す [コメント]
これにより、描画は問題なく開始されますが、描画コマンドの前に待機コマンドが配置されたかのように、非常に急速に速度が低下します。
参照用のコードは次のとおりです。
/*plotx.Clear(BACKGOUNDCOLOR)
ploty.Clear(BACKGOUNDCOLOR)
plotz.Clear(BACKGOUNDCOLOR)*/
for (int j = 1; j < 599; j++)
{
if (j > RealTimeBuffer.Count - 1) break;
QueueEntity past = RealTimeBuffer.ElementAt(j - 1);
QueueEntity current = RealTimeBuffer.ElementAt(j);
if (j == 1)
{
//plotx.DrawLine(channelPen[5], 0, 140, 0, 0);
//ploty.DrawLine(channelPen[5], 0, 140, 0, 0);
//plotz.DrawLine(channelPen[5], 0, 140, 0, 0);
}
//plotx.DrawLine(channelPen[5], j, 140, j, 0);
plotx.DrawLine(channelPen[0], j - 1, (((past.accdata.X - 0x7FFF) / 256) + 64), j, (((current.accdata.X - 0x7FFF) / 256) + 64));
//ploty.DrawLine(channelPen[5], j, 140, j, 0);
ploty.DrawLine(channelPen[1], j - 1, (((past.accdata.Y - 0x7FFF) / 256) + 64), j, (((current.accdata.Y - 0x7FFF) / 256) + 64));
//plotz.DrawLine(markerPen, j, 140, j, 0);
plotz.DrawLine(channelPen[2], j - 1, (((past.accdata.Z - 0x7FFF) / 256) + 94), j, (((current.accdata.Z - 0x7FFF) / 256) + 94));
}
これらのオーバーヘッドを回避するためのトリックはありますか?
そうでない場合、他の/より良い解決策はありますか?
編集: ソリューション コードについては、以下の [最終的なソリューション] を参照してください。