2011-07-07 9 views
9

¿Es posible trazar los datos en un gráfico ZedGraph y guardarlo como un archivo sin mostrar/generar un gráfico que sea visible para el usuario? Estoy tratando de procesar una gran cantidad de conjuntos de datos y generar un gráfico y guardarlo en un archivo para ver fuera de la aplicación.Generación y almacenamiento de diagramas ZedGraph sin mostrar en los formularios

Si esto no se puede hacer, ¿sería posible mostrar el gráfico en una forma oculta/minimizada, guardar el gráfico, cerrar la ventana y repetir para cada gráfico?

Respuesta

7

Es posible.

Cree y manipule el control ZedGraph como de costumbre, pero simplemente no se agrega a la lista Form.Controls, por ejemplo, en el método InitializeComponent(), comente algo que se parece a la de abajo

this.Controls.Add(this.zedGraphControl); 

Hay hay un par de maneras de guardar el gráfico

  • Si desea que aparezca un cuadro de diálogo guardar como, llame SaveAs() en el control gráfico.
  • Si no desea que el diálogo, puede escribir la imagen utilizando GetImage() en el MasterPane y guarde que:.

    zedGraphControl.MasterPane.GetImage() Guardar ("test.bmp") ;

+1

Tengo un BackgroundWorker que ejecuta el código para generar un gráfico, así como otras tareas, de forma asíncrona. He determinado que generar un ZedGraphControl en un hilo de fondo hará que el hilo no se complete (a través del evento TaskComplete), aunque se ejecute el método DoWork. ¿Hay algún otro método para hacer esto? –

+0

Acabo de probar esto y funcionó para mí, me registré con worker.RunWorkerCompleted + = new RunWorkerCompletedEventHandler (backgroundWorker1_RunWorkerCompleted); – PeskyGnat

+0

Lo siento, de hecho, tengo un evento que se dispara después de que un backgroundworker completa. El controlador de eventos genera el gráfico y luego inicia nuevamente el mismo BackgroundWorker. La segunda vez que se ejecuta BGWorker, nunca llega a TaskComplete. Tuve que poner la generación de gráficos en un BGWorker separado por alguna razón. Es bastante extraño. –

5

Aquí es un fragmento de código para crear y guardar los mapas de bits sin ninguna infraestructura necesaria WinForms:

var zedGraph = new ZedGraphControl(); 

// configure ZedGraphControl here 

using (var g = zedGraph.CreateGraphics()) 
{ 
    zedGraph.MasterPane.ReSize(g, new RectangleF(0, 0, widthPx, heightPx)); 
} 
zedGraph.MasterPane.GetImage().Save(Path.Combine(destinationDir, "test.bmp")); 

Esto debería incluso ser capaz de funcionar como servicio sin ningún tipo de escritorio. El único inconveniente es que necesita hacer referencia a System.Windows.Forms y System.Drawing para usarlo.

Cuestiones relacionadas