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> } }});}
保存图表到图片
我们通过按钮点击事件保存所有图表到图片。需要使用图表的Arrange 和 UpdateLayout 方法生成图表。
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 layoutcharts[i].Arrange(new Rect(0, 0, sz.Width, sz.Height));
charts[i].UpdateLayout();charts[i].SaveImage(file, ImageFormat.Jpeg);}}}
效果图:
Demo 下载:
VS2010 + Studio for WPF