使用自定义图像导出代码创建的Steema图表

时间:2014-11-06 16:44:58

标签: c# teechart

是否有某种方法可以使用自定义绘图导出Steema图表而不通过“屏幕绘制”?

我正在尝试导出一个尚未在屏幕上绘制的Steema TChart,上面有一些自定义绘图。我找到了Graphics3D对象,但是当我尝试使用它时会抛出NullReferenceException

  

at Steema.TeeChart.WPF.Drawing.Graphics3DWPF.Draw(Rect destRect,Rect srcRect,BitmapSource image,Boolean transparent)
    在Steema.TeeChart.WPF.Drawing.Graphics3D.Draw(Rect r,BitmapSource image,Boolean transparent)
    在WpfSteemaApplication.MainWindowViewModel.SaveImage()......

我发现的有关自定义绘图的唯一其他信息是在事件BeginDrawAfterDraw中,在我导出图像之前似乎没有调用它。
然而,其他一切看起来都很好,它只是我需要的自定义图像。

private void SaveImage()
{
    BitmapSource bitmap = new BitmapImage(new Uri("pack://application:,,,/button.png"));
    TChart chart = new TChart();
    JPEGFormat jpegFormat = chart.Export.Image.JPEG;

    // This throws an exception when uncommented.
    //chart.Graphics3D.Draw(new Rect(0, 0, 100, 100), bitmap, true);
    Line line = new Line();
    line.FillSampleValues();
    chart.Series.Add(line);
    jpegFormat.Width = 1024;
    jpegFormat.Height = 340;
    jpegFormat.Quality = 100;
    jpegFormat.Save("C:\\Temp\\steemachart.jpg");
}

1 个答案:

答案 0 :(得分:1)

我在图表上找到DoInvalidate()方法,后者又调用AfterDraw。导出图像之后,图像和图表都在图像中呈现

private void SaveImage()
{
    TChart chart = new TChart();
    JPEGFormat jpegFormat = chart.Export.Image.JPEG;
    Line line = new Line();
    line.FillSampleValues();
    chart.Series.Add(line);
    jpegFormat.Width = 1024;
    jpegFormat.Height = 340;
    jpegFormat.Quality = 100;
    chart.AfterDraw += OnAfterDraw;
    chart.DoInvalidate();
    jpegFormat.Save("C:\\Temp\\steemachart.jpg");
}

private void OnAfterDraw(object sender, Graphics3D g)
{
    BitmapSource bitmap = new BitmapImage(new Uri("pack://application:,,,/button.png"));
    g.Draw(new Rect(0, 0, bitmap.Width, bitmap.Height), bitmap, true);
}