C# 使用不带控件的Microsoft.NET图表控件库生成图像

C# 使用不带控件的Microsoft.NET图表控件库生成图像,c#,.net,charts,C#,.net,Charts,是否可以使用Microsoft图表控件库生成图像(jpeg、png等),而无需实例化WinForm或ASP.NET控件类?我看到的所有示例都使用了一个控制组件。我需要创建一个库,其中包含一些简单的方法,这些方法获取要绘制的数据并返回一个新的图表图像。示例: public byte[] GeneratePlot(IList<SeriesData> series) { // generate and return JPEG } public void GeneratePlot(I

是否可以使用Microsoft图表控件库生成图像(jpeg、png等),而无需实例化WinForm或ASP.NET控件类?我看到的所有示例都使用了一个控制组件。我需要创建一个库,其中包含一些简单的方法,这些方法获取要绘制的数据并返回一个新的图表图像。示例:

public byte[] GeneratePlot(IList<SeriesData> series)
{
    // generate and return JPEG
}
public void GeneratePlot(IList<SeriesData> series, Stream outputStream)
{
    // generate JPEG and write to stream
}
public byte[]GeneratePlot(IList系列)
{
//生成并返回JPEG
}
公共void GeneratePlot(IList系列,流输出流)
{
//生成JPEG并写入流
}
如果不可能:

using System.Windows.Forms.DataVisualization.Charting;
using System.IO;
...
    public void GeneratePlot(IList<DataPoint> series, Stream outputStream) {
      using (var ch = new Chart()) {
        ch.ChartAreas.Add(new ChartArea());
        var s = new Series();
        foreach (var pnt in series) s.Points.Add(pnt);
        ch.Series.Add(s);
        ch.SaveImage(outputStream, ChartImageFormat.Jpeg);
      }
    }
  • 你能推荐一下吗 创建/处理新图表 控制用户每次调用 GeneratePlot()方法
  • 有吗 另一个.NET库(最好是 免费)你会推荐吗

  • 如果您只需要图表图像,请多谢。然后可以使用图表控件保存到磁盘

    myChart.SaveImage("C:\mypic.png", System.Drawing.Imaging.ImageFormat.Png)
    
    然后从磁盘加载该映像。如果图表只生成一次,那么您也可以先检查文件系统中的映像,然后仅在映像不存在时重新渲染它

    希望这有帮助。

    是的,这是可能的:

    using System.Windows.Forms.DataVisualization.Charting;
    using System.IO;
    ...
        public void GeneratePlot(IList<DataPoint> series, Stream outputStream) {
          using (var ch = new Chart()) {
            ch.ChartAreas.Add(new ChartArea());
            var s = new Series();
            foreach (var pnt in series) s.Points.Add(pnt);
            ch.Series.Add(s);
            ch.SaveImage(outputStream, ChartImageFormat.Jpeg);
          }
        }
    
    使用System.Windows.Forms.DataVisualization.Charting;
    使用System.IO;
    ...
    公共void GeneratePlot(IList系列,流输出流){
    使用(var ch=new Chart()){
    添加(新的ChartArea());
    var s=新系列();
    foreach(系列中的var pnt)s.Points.Add(pnt);
    ch.系列增补件;
    保存图像(outputStream,ChartImageFormat.Jpeg);
    }
    }
    
    由于图表继承自System.Windows.Forms.Control,因此为每个函数调用创建和处理该图表是否会很昂贵?控件的费用在于创建其句柄属性。换句话说:创建窗口。这里不会发生这种情况。我们可以用这种方法创建树形图吗?:)