Zen*_*nya 23
关键是你应该考虑将绘图数据存储在某个地方.如前所述,缓冲位图是一种解决方案.但是,如果您没有太多绘制,有时将绘图数据存储在变量或数组中并重绘OnPaint事件中的所有内容会更容易和更好.
假设您收到一些应添加到图表中的点数据.你们所有人都创造了一个点列表:
List<Point> points = new List<Point>();
Run Code Online (Sandbox Code Playgroud)
然后,每次获得新点时,将其添加到列表中并刷新表单:
points.Add(newPoint);
this.Refresh();
Run Code Online (Sandbox Code Playgroud)
在OnPaint事件中输入以下代码:
private void Form_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawLines(Pens.Red, points);
}
Run Code Online (Sandbox Code Playgroud)
这种工作速度相当快,达到100 000点并且使用的内存比缓冲位图解决方案少得多.但是你应该根据绘图的复杂性决定使用哪种方式.
正如重新运行所说,您需要缓冲您的表单(因为您在绘制数据后似乎丢弃了数据).
这基本上就是我这样做的:
private Bitmap buffer;
// When drawing the data:
if (this.buffer == null)
{
this.buffer = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);
}
// then draw on buffer
// then refresh the form
this.Refresh();
protected override void OnPaint(PaintEventArgs e)
{
if (this.buffer != null)
{
e.Graphics.DrawImage(this.buffer);
}
}
Run Code Online (Sandbox Code Playgroud)
也就是说,您可能希望缓存数据,以便在表单大小更改时更改缓冲区的大小,然后重新绘制其上的旧数据.
| 归档时间: |
|
| 查看次数: |
63698 次 |
| 最近记录: |