导出代码创建的具有自定义图像的Steema图表

本文关键字:自定义 图像 Steema 图表 代码 创建 | 更新日期: 2023-09-27 18:29:29

是否有某种方法可以在不通过"屏幕绘制"的情况下导出带有自定义图形的Steema图表

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

在Steema.TeeChart.WPF.Drawing.Graphics3DWPF.Draw(Rect-destRect,Rect-srcRect,BitmapSource图像,布尔透明)
在Steema.TeeChart.WPF.Drawing.Graphics3D.Draw(Rect r,BitmapSource图像,布尔透明)
在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");
}

导出代码创建的具有自定义图像的Steema图表

我在图表上找到了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);
}