2016-08-25 2 views
0

Мы используем TeeChart для .net (версия 4.1.2013.7302) в нашем приложении форм.Экспорт TeeChart как изображения

В одной из диаграмм нашего продукта разрешена прокрутка по оси Y. Это делает некоторую часть диаграммы видимой в данном экземпляре. Чтобы увидеть другую часть диаграммы, пользователю необходимо использовать полосу прокрутки. Вместо полосы прокрутки оси используется отдельная полоса прокрутки, так как при этом будет выполняться смежное управление сеткой; ожидается, что сетка сетки & будет прокручиваться с использованием общей полосы прокрутки. Ниже приводится образец формы изображения, изображающие сценарий:

enter image description here

Мы используем функцию экспорта TeeChart, чтобы экспортировать эту диаграмму в виде изображения. Но так как карта имеет прокрутку (например, минимальная диаграмма не отображается по умолчанию); TeeChart экспортирует только видимую часть диаграммы, а не весь график. Ниже приведено изображение экспортируемой диаграммы: enter image description here

Просьба указать, существует ли какой-либо способ экспортировать весь график в качестве изображения, а не только его видимую часть?

Спасибо заранее.

ответ

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, что я не пробовал, и некоторые шаги могут быть сведены вместе, но я надеюсь, что они понятны и полезны, и дать вам что-то того, что вы ищете.

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); 
+0

Спасибо Yeray за ответ. Но это не решает нашу проблему, так как экспортированная диаграмма потеряет первоначальный внешний вид (например, вертикальное расстояние между рядами). В более простых словах, если 1/4-й график отображается с полосой прокрутки, мы хотим экспортировать его с текущим размером изображения, то есть в этом случае экспортированное изображение должно быть 4 раза в вертикальных размерах, чем текущая видимая высота диаграммы. Затем он сохранил бы интервал между рядами. Есть ли способ сделать это, пожалуйста, предложите. –

Смежные вопросы