我正在通过 System.Drawing 进行一些绘图,但我遇到了一些问题。
我将数据保存在队列中,并将数据绘制(绘图)到三个图片框
此方法填充图片框,然后滚动图形。
所以不要在以前的图纸之上绘制(并且逐渐看起来更混乱),我找到了两种绘制图表的解决方案。
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));
}
有什么技巧可以避免这些开销吗?
如果没有,会有其他/更好的解决方案吗?
编辑:有关解决方案代码,请参阅下面的 [最终解决方案]