C# 生成和保存ZedGraph绘图而不在窗体上显示

C# 生成和保存ZedGraph绘图而不在窗体上显示,c#,graph,zedgraph,C#,Graph,Zedgraph,是否可以将数据打印到ZedGraph图形并将其保存为文件,而不显示/生成用户可见的图形?我希望处理大量数据集,生成一个图形,并将其保存到一个文件中,以便在应用程序外部查看 如果无法完成此操作,是否可以在隐藏/最小化窗体上显示图形,保存图形,关闭窗口,然后对每个图形重复此操作?这是可能的 您可以像往常一样创建和操作ZedGraph控件,但不要将其添加到表单.Controls列表中,例如,在InitializeComponent()方法中,注释掉如下所示的内容 this.Controls.Add(t

是否可以将数据打印到ZedGraph图形并将其保存为文件,而不显示/生成用户可见的图形?我希望处理大量数据集,生成一个图形,并将其保存到一个文件中,以便在应用程序外部查看

如果无法完成此操作,是否可以在隐藏/最小化窗体上显示图形,保存图形,关闭窗口,然后对每个图形重复此操作?

这是可能的

您可以像往常一样创建和操作ZedGraph控件,但不要将其添加到
表单.Controls
列表中,例如,在
InitializeComponent()
方法中,注释掉如下所示的内容

this.Controls.Add(this.zedGraphControl);
有几种方法可以保存图形

  • 如果要显示“另存为”对话框,请在图形控件上调用
    SaveAs()
  • 如果不需要该对话框,可以使用主窗格上的
    GetImage()
    写出图像,然后保存该图像:

    zedGraphControl.MasterPane.GetImage().Save(“test.bmp”)


以下是一段代码片段,用于在不需要任何WinForms基础设施的情况下创建和保存位图:

var zedGraph = new ZedGraphControl();

// configure ZedGraphControl here

using (var g = zedGraph.CreateGraphics())
{
    zedGraph.MasterPane.ReSize(g, new RectangleF(0, 0, widthPx, heightPx));
}
zedGraph.MasterPane.GetImage().Save(Path.Combine(destinationDir, "test.bmp"));

这甚至可以在没有任何桌面的情况下作为服务运行。唯一的缺点是您需要引用
System.Windows.Forms
System.Drawing
来使用它。

我有一个BackgroundWorker,它运行代码以异步生成图形以及其他任务。我已经确定,在后台线程上生成ZedGraphControl将导致线程无法完成(通过TaskComplete事件),即使DoWork方法已执行。有没有其他方法可以做到这一点?我刚刚尝试了这个方法,它对我有效,我注册了worker.RunWorkerCompleted+=新的RunWorkerCompletedEventHandler(backgroundWorker1\u RunWorkerCompleted);抱歉,我实际上有一个事件在backgroundworker完成后的某个时间被触发。事件处理程序生成图形,然后再次启动相同的BackgroundWorker。BGWorker第二次运行时,永远无法完成任务。出于某种原因,我不得不将图形生成放在一个单独的BGWorker中。很奇怪。这一定是ZedGraph的旧版本。此处未定义主窗格。GraphPane是,但它没有GetImage()方法。你能更新这个代码吗?这个答案是2012年的。自2013年以来,我从未接触过ZedGraph。