2009-12-01 5 views
19

WinFormまたはASP.NETコントロールクラスをインスタンス化せずにMicrosoft Chart Controlsライブラリを使用して画像(jpeg、pngなど)を生成できますか?私が見たすべての例は、コントロールコンポーネントを利用しています。私はプロットされるデータを取って新しいチャートイメージを返す単純なメソッドを含むライブラリを作成する必要があります。例:コントロールなしのMicrosoft .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 
} 

それが不可能な場合:

  1. あなたが 作成/廃棄新しいグラフ 制御ユーザーが GeneratePlot()メソッドを呼び出すたびにお勧めですか?
  2. があります 別の.NETライブラリ(好ましくは 無料)をお勧めしますか?

おかげ

答えて

22

はい、それは可能です:

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); 
     } 
    } 
+0

チャートはSystem.Windows.Forms.Controlから継承しているので、作成し、各関数呼び出しのために処分するには高価になるだろうということですか? – dewald

+5

Controlの費用はHandleプロパティを作成する際に発生します。つまり、ウィンドウを作成することです。それはここでは起こりません。 –

+0

この方法でツリーチャートを作成できますか? :) – AnhTriet

5

あなたが望むすべてがチャート画像である場合。次に、チャートコントロールを使用してディスクに保存することができます。

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

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

これが役に立ちます。

関連する問題