2009-12-01 4 views
19

Est-il possible de générer des images (jpeg, png, etc.) à l'aide de la bibliothèque Microsoft Chart Controls sans instancier une classe WinForm ou ASP.NET Control? Tous les exemples que j'ai vus utilisent un composant de contrôle. J'ai besoin de créer une bibliothèque qui contient des méthodes simples qui prennent des données à tracer et retourne une nouvelle image de graphique. Exemples:Générer une image avec Microsoft .NET Chart Controls Bibliothèque sans contrôle

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

S'il est impossible:

  1. recommanderiez-vous création/la disposition d'une nouvelle carte contrôle chaque fois que l'utilisateur appelle la méthode GeneratePlot() ?
  2. est là une autre bibliothèque .NET (de préférence gratuit) que vous recommanderiez?

Merci

Répondre

22

Oui, cela est possible:

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

Depuis graphique hérite de System.Windows.Forms.Control, cela va être coûteux de créer et de disposer pour chaque appel de fonction? – dewald

+5

Le coût de Control est de faire créer sa propriété Handle. En d'autres termes: créer la fenêtre. Cela n'arrive pas ici. –

+0

Pourrions-nous créer un arbre en utilisant cette façon? :) – AnhTriet

5

Si vous voulez simplement des images de tableau. Ensuite, vous pouvez utiliser les contrôles de graphique pour enregistrer sur le disque.

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

Ensuite, chargez cette image à partir du disque. Si les graphiques ne sont générés qu'une seule fois, vous pouvez également vérifier d'abord le système de fichiers de l'image, puis ne le restituer que s'il n'existe pas.

Espérons que cela aide.

Questions connexes