2009-12-01 10 views
19

¿Es posible generar imágenes (jpeg, png, etc.) usando la biblioteca Microsoft Chart Controls sin instanciar una clase WinForm o ASP.NET Control? Todos los ejemplos que he visto utilizan un componente de control. Necesito crear una biblioteca que contenga métodos simples que tomen datos para trazar y devuelva una nueva imagen de gráfico. Ejemplos:Generar imagen con Microsoft .NET Chart Controls Biblioteca sin control

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

Si no es posible:

  1. me recomiendan creación/eliminación de un nuevo control de gráfico cada vez que el usuario llama al método GeneratePlot()?
  2. ¿hay otra biblioteca .NET (preferiblemente gratis) que usted recomendaría?

Gracias

Respuesta

22

Sí, eso es posible:

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

Desde Gráfico hereda de System.Windows.Forms.Control, es que va a ser caro para crear y disponer para cada llamada a la función? – dewald

+5

El gasto de Control consiste en obtener su propiedad Handle creada. En otras palabras: crear la ventana. Eso no sucede aquí. –

+0

¿Podríamos crear un diagrama de árbol usando esta forma? :) – AnhTriet

5

Si lo que quieres es imágenes de gráfico. Luego puede usar los controles del gráfico para guardarlos en el disco.

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

A continuación, cargue esa imagen del disco. Si los gráficos solo se generan una vez, también puede verificar primero el sistema de archivos de la imagen y luego solo volver a procesarla si no existe.

Espero que esto ayude.

Cuestiones relacionadas