仅重绘窗格的一部分

时间:2015-02-17 12:14:07

标签: c# draw zedgraph

我正在使用ZedGraph在我的应用程序上显示曲线(10k +点)。

我添加了竖条以允许用户查看某个点的值(十字形的种类)。每次用户移动鼠标时,都会重绘整个控件:

bool stackedGraphControl1_MouseMoveEvent(ZedGraphControl sender, MouseEventArgs e)
{
    DrawCursors(e.Location);
    Refresh();
    return false;
}

超过2条曲线,计算机变得迟钝。一种解决方案是仅绘制垂直条(删除Refresh()调用并仅绘制垂直条)。这样更快但图形结果很有趣:

enter image description here

但不是很有用。我知道所有垂直条都是一次又一次地被绘制而不被移除。

有没有办法重新绘制(即:删除和绘制)条形图(位于我窗格的GraphObjList中)?

1 个答案:

答案 0 :(得分:1)

过去,我通过覆盖ZedGraphControl的OnPaint来创建分层绘图效果,从而完成了这项功能。

将ZedGraph绘制到中间位图或BufferedGraphics。保存此位图以供将来绘制,并在其他内容发生更改时使位图无效(轴值,曲线已添加)

Future OnPaint将此Bitmap调用blit到图形对象并手动绘制任何GraphObjs。

MouseMove事件只是更新指标的属性并强制使用缓存的zedgraph图像重绘。