我正在尝试导出一个尚未在屏幕上绘制的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()......
我发现的有关自定义绘图的唯一其他信息是在事件BeginDraw
和AfterDraw
中,在我导出图像之前似乎没有调用它。
然而,其他一切看起来都很好,它只是我需要的自定义图像。
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");
}
答案 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);
}