Создание изображения с помощью библиотеки элементов управления диаграмм Microsoft .NET без элемента управления - PullRequest
20 голосов
/ 01 декабря 2009

Можно ли генерировать изображения (jpeg, png и т. Д.) С помощью библиотеки Microsoft Chart Controls без создания экземпляра класса WinForm или ASP.NET Control? Все примеры, которые я видел, используют компонент управления. Мне нужно создать библиотеку, которая содержит простые методы, которые берут данные для построения графика и возвращают новое изображение диаграммы. Примеры:

public byte[] GeneratePlot(IList<SeriesData> series)
{
    // generate and return JPEG
}
public void GeneratePlot(IList<SeriesData> series, Stream outputStream)
{
    // generate JPEG and write to stream
}

Если это невозможно:

  1. вы бы порекомендовали создание / размещение нового графика контролировать каждый раз, когда пользователь вызывает Метод GeneratePlot ()?
  2. есть другая библиотека .NET (желательно бесплатно) что бы вы порекомендовали?

Спасибо

Ответы [ 2 ]

23 голосов
/ 01 декабря 2009

Да, это возможно:

using System.Windows.Forms.DataVisualization.Charting;
using System.IO;
...
    public void GeneratePlot(IList<DataPoint> series, Stream outputStream) {
      using (var ch = new Chart()) {
        ch.ChartAreas.Add(new ChartArea());
        var s = new Series();
        foreach (var pnt in series) s.Points.Add(pnt);
        ch.Series.Add(s);
        ch.SaveImage(outputStream, ChartImageFormat.Jpeg);
      }
    }
5 голосов
/ 01 декабря 2009

Если все, что вам нужно, это графические изображения. Затем вы можете использовать элементы управления диаграммой для сохранения на диск.

myChart.SaveImage("C:\mypic.png", System.Drawing.Imaging.ImageFormat.Png)

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...