仅重绘窗格的一部分
Redraw only a part of the pane
我正在使用 ZedGraph 在我的应用程序上显示曲线(具有 10k+ 个点)。
我添加了垂直条以允许用户查看一个点的值(一种十字准线)。每次用户移动鼠标时,整个控件都会重绘:
bool stackedGraphControl1_MouseMoveEvent(ZedGraphControl sender, MouseEventArgs e)
{
DrawCursors(e.Location);
Refresh();
return false;
}
超过 2 条曲线,计算机变得迟钝。一种解决方案是仅绘制垂直条(删除 Refresh()
调用并仅绘制垂直条)。这要快得多,但图形结果很有趣:
但用处不大。我明白了,所有的竖条都是一遍又一遍地绘制而没有被删除。
有没有办法只重绘(即:删除和绘制)条形图(位于我窗格的 GraphObjList
中)?
过去我通过覆盖 ZedGraphControl 的 OnPaint 来创建分层绘图效果来实现此功能。
将 ZedGraph 绘制到中间位图或 BufferedGraphics。保存此位图以供将来绘制,并在其他内容发生变化时使位图无效(轴值、添加的曲线)
未来的 OnPaint 调用此 Bitmap 到图形对象,并在其上手动绘制任何 GraphObjs。
MouseMove 事件仅更新指标的属性并强制使用缓存的 zedgraph 图像重绘。
我正在使用 ZedGraph 在我的应用程序上显示曲线(具有 10k+ 个点)。
我添加了垂直条以允许用户查看一个点的值(一种十字准线)。每次用户移动鼠标时,整个控件都会重绘:
bool stackedGraphControl1_MouseMoveEvent(ZedGraphControl sender, MouseEventArgs e)
{
DrawCursors(e.Location);
Refresh();
return false;
}
超过 2 条曲线,计算机变得迟钝。一种解决方案是仅绘制垂直条(删除 Refresh()
调用并仅绘制垂直条)。这要快得多,但图形结果很有趣:
但用处不大。我明白了,所有的竖条都是一遍又一遍地绘制而没有被删除。
有没有办法只重绘(即:删除和绘制)条形图(位于我窗格的 GraphObjList
中)?
过去我通过覆盖 ZedGraphControl 的 OnPaint 来创建分层绘图效果来实现此功能。
将 ZedGraph 绘制到中间位图或 BufferedGraphics。保存此位图以供将来绘制,并在其他内容发生变化时使位图无效(轴值、添加的曲线)
未来的 OnPaint 调用此 Bitmap 到图形对象,并在其上手动绘制任何 GraphObjs。
MouseMove 事件仅更新指标的属性并强制使用缓存的 zedgraph 图像重绘。