I need to create a picture for a report on a server where my application is running as service. How can i do this? I've tried, but the chart throws an exception and when i raise the loaded event the chart hangs in the SaveToStream method.
Here is my example code:
Code: Select all
namespace CreatePictureCodeBehind
{
using System;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Media;
using Arction.WPF.LightningChartUltimate;
using Arction.WPF.LightningChartUltimate.Axes;
using Arction.WPF.LightningChartUltimate.SeriesXY;
class Program
{
private LightningChartUltimate m_chart;
public LightningChartUltimate MChart
{
get { return m_chart; }
}
[STAThread]
static void Main(string[] args)
{
Program program = new Program();
program.CreateChart();
program.MChart.RaiseEvent(new RoutedEventArgs(FrameworkElement.LoadedEvent));
const string picturePng = "C:\\temp\\picture.png";
if (File.Exists(picturePng))
{
File.Delete(picturePng);
}
FileStream fileStream = new FileStream(picturePng, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None);
program.MChart.SaveToStream(fileStream, TargetImageFormat.Png, new BitmapAntialiasOptions(), 3507, 2480);
fileStream.Close();
fileStream.Dispose();
}
/// <summary>
/// Create chart.
/// </summary>
private void CreateChart()
{
//Create new chart
m_chart = new LightningChartUltimate();
//Disable rendering, strongly recommended before updating chart properties
m_chart.BeginUpdate();
//Chart parent must be set
//Chart title text
m_chart.Title.Text = "Body weight by groups";
//Hide legend box
m_chart.ViewXY.LegendBox.Visible = false;
//Setup x-axis
AxisX axisX = m_chart.ViewXY.XAxes[0];
axisX.SetRange(0, 5);
axisX.ScrollMode = XAxisScrollMode.None;
axisX.ValueType = AxisValueType.Number;
axisX.Title.Text = "Groups";
//Setup y-axis
AxisY axisY = m_chart.ViewXY.YAxes[0];
axisY.Title.Text = "Weight (kg)";
AddSeries();
//Allow chart rendering
m_chart.EndUpdate();
}
void AddSeries()
{
//Add polygon for box
PointLineSeries pointLineSeries = new PointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], m_chart.ViewXY.YAxes[0]);
pointLineSeries.MouseInteraction = false;
pointLineSeries.Title.Visible = true;
pointLineSeries.Title.Text = "Curve";
pointLineSeries.Title.Color = ChartTools.CalcGradient(Colors.Aqua, Colors.DarkBlue, 70);
SeriesPoint[] seriesPoints = CreatePoints().Select(x => new SeriesPoint(x.X, x.Y)).ToArray();
pointLineSeries.AddPoints(seriesPoints, true);
m_chart.ViewXY.PointLineSeries.Add(pointLineSeries);
}
static Point[] CreatePoints()
{
const int numbersOfPoints = 1000;
Point[] points = new Point[numbersOfPoints];
double xValue = 0;
Random random = new Random();
for (int index = 0; index < numbersOfPoints; index++, xValue++)
{
points[index] = new Point(xValue, random.NextDouble());
}
return points;
}
}
}
Raphael