web-dev-qa-db-ja.com

コントロールなしでMicrosoft.NETチャートコントロールライブラリを使用して画像を生成する

WinFormまたはASP.NETControlクラスをインスタンス化せずに、Microsoft Chart Controlsライブラリを使用して画像(jpeg、pngなど)を生成することは可能ですか?私が見たすべての例は、制御コンポーネントを利用しています。プロットするデータを取得して新しいグラフ画像を返す簡単なメソッドを含むライブラリを作成する必要があります。例:

public byte[] GeneratePlot(IList<SeriesData> series)
{
    // generate and return JPEG
}
public void GeneratePlot(IList<SeriesData> series, Stream outputStream)
{
    // generate JPEG and write to stream
}

それが不可能な場合:

  1. ユーザーがGeneratePlot()メソッドを呼び出すたびに、新しいチャートコントロールを作成/破棄することをお勧めしますか?
  2. あなたがお勧めする別の.NETライブラリ(できれば無料)はありますか?

ありがとう

20
dewald

はい、それは可能です:

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);
      }
    }
22
Hans Passant

必要なのはチャート画像だけです。次に、チャートコントロールを使用してディスクに保存できます。

myChart.SaveImage("C:\mypic.png", System.Drawing.Imaging.ImageFormat.Png)

次に、そのイメージをディスクからロードします。チャートが1回だけ生成される場合は、最初にファイルシステムで画像を確認してから、画像が存在しない場合にのみ再レンダリングすることもできます。

お役に立てれば。

5
Leigh S