1

使用来自这篇文章的从控制器生成图像的答案,我创建了一个控制器操作来返回一个图表图像,如下所示(X 和 Y 值只是作为测试数据存在):

    public FileContentResult HistoryChart()
    {
        Chart chart = new Chart();
        string[] currencies = { "ZAR", "USD", "GBP", "JPY" };

        foreach (string currency in currencies)
        {
            Series series = new Series(currency);
            series.ChartType = SeriesChartType.FastLine;
            for (int x = 0; x <= 30; x++)
                series.Points.AddXY(x, (x * 5));
            chart.Series.Add(series);
        }

        using (MemoryStream ms = new MemoryStream())
        {
            chart.SaveImage(ms, ChartImageFormat.Png);
            ms.Seek(0, SeekOrigin.Begin);

            return File(ms.ToArray(), "image/png", "mychart.png");
        }
    }

问题是,控制器返回的图像是空白的(尽管它确实返回了图像)

我希望我遗漏了一些简单的东西!任何输入将不胜感激,谢谢。

4

2 回答 2

4

希望这可以帮助.....

我遇到了同样的问题:

这完全与颜色有关,我在使用此博客中的另一个示例并从中推断出问题后向您添加了一些代码 - 所以“谢谢”大家......

    public FileContentResult HistoryChart()
    {
        Chart chart = new Chart();
        **chart.BackColor = Color.Transparent;**

        string[] currencies = { "ZAR", "USD", "GBP", "JPY" };

        foreach (string currency in currencies)
        {
            Series series = new Series(currency);
            series.ChartType = SeriesChartType.FastLine;
            for (int x = 0; x <= 30; x++)
                series.Points.AddXY(x, (x * 5));
            chart.Series.Add(series);
        }

        **ChartArea ca1 = new ChartArea("ca1");
        ca1.BackColor = Color.Cyan;
        chart.ChartAreas.Add(ca1);**

        using (MemoryStream ms = new MemoryStream())
        {
            chart.SaveImage(ms, ChartImageFormat.Png);
            ms.Seek(0, SeekOrigin.Begin);

            return File(ms.ToArray(), "image/png", "mychart.png");
        }
    } 

此外,您需要确保您的控制器具有:

使用 System.Drawing;使用 System.Web.UI.WebControls;

祝大家...

JK。

于 2010-04-28T20:21:25.337 回答
0

嗨,我遇到了同样的问题,这是因为我在创建它的不同时间保存了图像。渲染内部状态时会丢失。在保存图像之前再次测试生成图表。对不起我的英语不好。

于 2013-06-06T13:52:04.173 回答