保存更高分辨率的图表而不会弄乱外观

use*_*221 9 c# charts controls resize resolution

你们都必须原谅我的无知,因为我最近才开始使用C#.我只是对Windows图表控件有疑问,因为我遇到了一个相当愚蠢的问题.

我有一个程序,其中包含一些报告,包括漂亮的窗口图表来表示一些数据.但是,我一直在将这些图表保存到文件以及各种用途,只需使用以下内容:

chart2.SaveImage(savefilename,ChartImageFormat.Png);

我的第一个问题在于,我不知道如何在保存前不先增加图表控件的大小而将其保存为更高的分辨率.拥有合理质量的图像会很不错.

第二个问题是当我确实增加图表控件的大小时,可用的操作似乎只能增加实际图表的大小,而不是标签或文本.如果我可以手动更改所有这些,这不会是一个问题,这就是我对条形图所做的,但有一行我无法弄清楚如何制作更厚的:饼图上的标签线.我在下图中画了一个箭头:

http://www.bolinger.ca/chart.png

因此,当图表增加到合理的分辨率时,由于没有增加到适当的相对大小,该线几乎不可见.我觉得应该有办法改变它,但无法弄清楚它会是什么.

再次,原谅我的无知.如果这两个问题中的任何一个都可以解决,那么我可以轻松地知道这些饼图看起来不错.谢谢!

小智 11

在表单上创建/复制隐藏(Visible = false)图表对象.您甚至可以将其Top和Left属性设置为不在表单中.将此控件设置为非常高的宽度和高度(即2100 x 1500)...根据您的规格进行填充和格式化.一定要增加字体大小等.然后从隐藏图表中调用SaveImage()或DrawToBitmap()...

保存此文件时,对于大多数文字处理,桌面酒吧,打印等,它基本上都是足够高的分辨率.例如,2100 x 1500 @ 300 dpi = 7"x 5"用于打印...

在您的应用程序中,您还可以缩小或打印它:缩小"添加"分辨率,使图像变得更清晰.向上扩展会使图像模糊或模糊.

我不得不依赖这种技术,因为它是从.Net图表控件中获取高分辨率图表以进行打印或保存的最一致的方法...这是一个经典的作弊,但它的工作原理:)

例如:

private void cmdHidden_Click(object sender, EventArgs e) {
    System.Windows.Forms.DataVisualization.Charting.Title chtTitle =
        new System.Windows.Forms.DataVisualization.Charting.Title();
    System.Drawing.Font chtFont = new System.Drawing.Font("Arial", 42);
    string[] seriesArray = { "A", "B", "C" };
    int[] pointsArray = { 1, 7, 4 };

    chart1.Visible = false;
    chart1.Width = 2100;
    chart1.Height = 1500;
    chart1.Palette = System.Windows.Forms.DataVisualization.Charting.ChartColorPalette.Bright;

    chtTitle.Font = chtFont;
    chtTitle.Text = "Demographics Comparison";
    chart1.Titles.Add(chtTitle);

    chart1.Series.Clear();

    // populate chart    
    for (int i = 0; i < seriesArray.Length; i++) {
        Series series = chart1.Series.Add(seriesArray[i]);
        series.Label = seriesArray[i].ToString();
        series.Font = new System.Drawing.Font("Arial", 24);
        series.ShadowOffset = 5;
        series.Points.Add(pointsArray[i]);
    }

    // save from the chart object itself
    chart1.SaveImage(@"C:\Temp\HiddenChart.png", ChartImageFormat.Png);

    // save to a bitmap
    Bitmap bmp = new Bitmap(2100, 1500);
    chart1.DrawToBitmap(bmp, new Rectangle(0, 0, 2100, 1500));
    bmp.Save(@"C:\Temp\HiddenChart2.png");
}
Run Code Online (Sandbox Code Playgroud)


Ray*_*Ray 1

尝试设置chart2.RenderTransform = new ScaleTransform(10,10)并保存。这也会使你的线条更大。