C1Chart 提供了SaveImage 方法,可以直接保存到 Bmp、Png、Gif、Jpeg、Tiff 和 Wmp格式的图片。

一个常见的用户使用场景是 TabControl 中包含多个图表,用户需要在没有展示图表的情况下,一次性保存所有图表到图片。

下面我们就来分享下实现方法:

创建图表添加到TabControl中

首先我们创建应用模拟用户使用场景,创建图表添加到TabControl子窗体中,代码如下:

// create tabs with charts
for (int i = 0; i < cnt; i++)
{
charts<em class="bbcode-em"></em> = new C1Chart() {ChartType = ChartType.Line};
var values1 = new double[npts];
var values2 = new double[npts];
var values3 = new double[npts];
  
for (int j = 0; j < npts; j++)
{
    values1[j] = rnd.Next(100);
    values2[j] = rnd.Next(100);
    values3[j] = rnd.Next(100);
}
charts<em class="bbcode-em"></em>.Data.Children.Add(new DataSeries() {ValuesSource = values1, Label = "series1" });
charts<em class="bbcode-em"></em>.Data.Children.Add(new DataSeries() { ValuesSource = values2, Label = "series2" });
charts<em class="bbcode-em"></em>.Data.Children.Add(new DataSeries() { ValuesSource = values3, Label = "series3" });
charts<em class="bbcode-em"></em>.Palette = ColorGeneration.Solstice;
charts<em class="bbcode-em"></em>.Children.Add(new C1ChartLegend() { Title = "Chart " + i });
  
tabs.Items.Add(new TabItem() 
    { 
    Header = "Tab " + i,
    Content = new Grid() { Children = { charts<em class="bbcode-em"></em> } } 
    }
);
}

 

保存图表到图片

我们通过按钮点击事件保存所有图表到图片。需要使用图表的ArrangeUpdateLayout 方法生成图表。

    private void SaveBtn_Click(object sender, RoutedEventArgs e)
    {
        // use size of visible chart
        var sz = new Size(charts[0].ActualWidth, charts[0].ActualHeight);
        for (int i = 0; i < cnt; i++)
        {
        using (var file = File.Open("chart" + i +  ".jpg", FileMode.Create))
        {
            // two arranges is neccesary to perform chart layout
            charts[i].Arrange(new Rect(0, 0, sz.Width, sz.Height));
            charts[i].UpdateLayout();
            charts[i].SaveImage(file, ImageFormat.Jpeg);
        }
        }
    }

 

效果图:screenshot

Demo 下载:

VS2010 + Studio for WPF