将TeeChart导出为图像

时间:2016-08-25 11:45:55

标签: winforms c#-4.0 teechart

我们在表单应用程序中使用TeeChart for .net(版本4.1.2013.7302)。

我们产品中的一个图表启用了Y轴滚动。这使得图表的某些部分在给定实例中可见。要查看图表的其他部分,用户需要使用滚动条。使用单独的滚动条代替轴滚动条,因为将有一个相邻的网格控件;图表和图表预计网格将使用常见滚动条滚动。以下是描述场景的示例表单图像:

enter image description here

我们正在使用TeeChart的导出功能将此图表导出为图像。但由于图表已启用滚动(即默认情况下图表的最小值不可见); TeeChart仅导出Chart的可见部分,而不是整个图表。以下是导出图表的图像: enter image description here

请建议是否有任何方法可以将整个图表导出为图像,而不仅仅是可见部分?

先谢谢。

2 个答案:

答案 0 :(得分:1)

这是一个更完整版的Yeray代码,它将导出的图像填充到完整的,主要是不可见的图表的大小:

private void button11_Click(object sender, EventArgs e)
{
  //get zoomed axis min maxes
  double xtmpMin = tChart1.Axes.Bottom.Minimum;
  double xtmpMax = tChart1.Axes.Bottom.Maximum;
  double ytmpMin = tChart1.Axes.Left.Minimum;
  double ytmpMax = tChart1.Axes.Left.Maximum;

  //how many pixels are plotted for the axes' ranges
  int yPixelRange = tChart1.Axes.Left.CalcPosValue(tChart1.Axes.Left.Minimum)-tChart1.Axes.Left.CalcPosValue(tChart1.Axes.Left.Maximum);
  int xPixelRange = tChart1.Axes.Bottom.CalcPosValue(tChart1.Axes.Bottom.Maximum) - tChart1.Axes.Bottom.CalcPosValue(tChart1.Axes.Bottom.Minimum);

  //get the chart header/footer space to re-apply to chart
  int yMargins = tChart1.Bounds.Height - yPixelRange;
  int xMargins = tChart1.Bounds.Width - xPixelRange;

  //how many pixels are we getting per axis scale
  double pixelsPerYAxisInt = yPixelRange / (ytmpMax - ytmpMin);
  double pixelsPerXAxisInt = xPixelRange / (xtmpMax - xtmpMin);

  //what increment are we at. Note. To get this back we may need to mod font size, min separation
  double yInc = tChart1.Axes.Left.CalcIncrement;
  double xInc = tChart1.Axes.Bottom.CalcIncrement;

  //now reset auto axes before plotting full chart. Could use other criteria here
  tChart1.Axes.Left.Automatic = true;
  tChart1.Axes.Bottom.Automatic = true;

  //Repaint full Chart (necessary for positioning calcs)
  tChart1.Draw();

  //set increments on full scales (note Chart will try to set them, 
  //but if it can't you have the last word with label separation, font size, etc)
  tChart1.Axes.Left.Increment = yInc;
  tChart1.Axes.Bottom.Increment = xInc;

  //dimension chart for export
  double fullYRange = tChart1.Axes.Left.Maximum - tChart1.Axes.Left.Minimum;
  double fullXRange = tChart1.Axes.Bottom.Maximum - tChart1.Axes.Bottom.Minimum;

  int fullYSize = (int)((pixelsPerYAxisInt * fullYRange) + yMargins);
  int fullXSize = (int)((pixelsPerXAxisInt * fullXRange) + xMargins);

  //setup and export image
  tChart1.Export.Image.PNG.Width = fullXSize;
  tChart1.Export.Image.PNG.Height = fullYSize;

  tChart1.Export.Image.PNG.Save(@"c:\mypath\chart.png");

  //reset screen chart to where it was      
  tChart1.Axes.Bottom.SetMinMax(xtmpMin, xtmpMax);
  tChart1.Axes.Left.SetMinMax(ytmpMin, ytmpMax);
}

有很多方法可以优化这些代码,Axis确实有一个我没有尝试过的iRange,并且可以将一些步骤放在一起,但我希望它们清晰有用,并为您提供一些内容。 #39;正在寻找。

答案 1 :(得分:0)

您可以手动调整轴刻度,导出图表,然后恢复轴。即(如果底轴为0 - 4.25是“整个图表”):

double tmpMin = tChart1.Axes.Bottom.Minimum;
double tmpMax = tChart1.Axes.Bottom.Maximum;
tChart1.Axes.Bottom.SetMinMax(0, 4.25);
tChart1.Export.Image.JPEG.Save(myFileName);
tChart1.Axes.Bottom.SetMinMax(tmpMin, tmpMax);