Saving higher resolution charts without messing up the appearance

后端 未结 3 1739
时光取名叫无心
时光取名叫无心 2020-12-30 10:57

you\'ll all have to excuse my ignorance as I have only recently started working with C#. I just have a question about the windows chart control, as I\'m encountering a rathe

3条回答
  •  被撕碎了的回忆
    2020-12-30 11:35

    Here's a class I made to make a larger graph, save it, then restore the graph. Works well for my my purposes.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using OfficeOpenXml.Drawing;
    using OfficeOpenXml.Drawing.Chart;
    using System.Drawing.Imaging;
    using System.Windows.Forms.DataVisualization.Charting;
    using System.Windows.Forms;
    
    namespace Simple_Grapher
    {
        class saveQualityChartImage
        {
            Chart theChart;
            System.Drawing.Font oldFont1 = new System.Drawing.Font("Trebuchet MS", 35F, System.Drawing.FontStyle.Bold);
            System.Drawing.Font oldFont2 = new System.Drawing.Font("Trebuchet MS", 15F, System.Drawing.FontStyle.Bold);
            System.Drawing.Font oldFont3 = new System.Drawing.Font("Trebuchet MS", 35F, System.Drawing.FontStyle.Bold);
            System.Drawing.Font oldLegendFont = new System.Drawing.Font("Trebuchet MS", 35F, System.Drawing.FontStyle.Bold);
    
            int oldLineWidth1;
            int oldLineWidth2;
            int oldLineWidth3;
            int oldLineWidth4;
    
            int oldWidth;
            int oldHeight;
            public saveQualityChartImage(Chart inputChart)
            {
                if (!(inputChart.Series.Count > 0))
                {
                    return;
                }
                theChart = inputChart;
                if (inputChart.Titles.Count > 0)
                {
                    oldFont1 = inputChart.Titles[0].Font;
                }
                oldFont2 = inputChart.ChartAreas[0].AxisX.LabelStyle.Font;
                oldFont3 = inputChart.ChartAreas[0].AxisX.TitleFont;
                if (theChart.Legends.Count > 0)
                {
                    oldLegendFont = theChart.Legends["Legend"].Font;
                }
                oldLineWidth1 = theChart.ChartAreas[0].AxisX.LineWidth;
                oldLineWidth2 = theChart.ChartAreas[0].AxisX.MajorTickMark.LineWidth;
                oldLineWidth3 = theChart.Series[0].BorderWidth;
                oldLineWidth4 = theChart.ChartAreas[0].AxisY.MajorGrid.LineWidth;
                oldWidth = theChart.Width;
                oldHeight = theChart.Height;
    
                saveimage();
            }
    
            public void saveimage()
            {
                theChart.Visible = false;
                System.Drawing.Font chtFont = new System.Drawing.Font("Trebuchet MS", 35F, System.Drawing.FontStyle.Bold);
                System.Drawing.Font smallFont = new System.Drawing.Font("Trebuchet MS", 15F, System.Drawing.FontStyle.Bold);
                if (theChart.Titles.Count > 0)
                {
                    theChart.Titles[0].Font = chtFont;
                }
    
                theChart.ChartAreas[0].AxisX.TitleFont = chtFont;
                theChart.ChartAreas[0].AxisX.LineWidth = 3;
                theChart.ChartAreas[0].AxisX.MajorGrid.LineWidth = 3;
                theChart.ChartAreas[0].AxisX.LabelStyle.Font = smallFont;
                theChart.ChartAreas[0].AxisX.MajorTickMark.LineWidth = 3;
    
                theChart.ChartAreas[0].AxisY.TitleFont = chtFont;
                theChart.ChartAreas[0].AxisY.LineWidth = 3;
                theChart.ChartAreas[0].AxisY.MajorGrid.LineWidth = 3;
                theChart.ChartAreas[0].AxisY.LabelStyle.Font = smallFont;
                theChart.ChartAreas[0].AxisY.MajorTickMark.LineWidth = 3;
                if (theChart.Legends.Count > 0)
                {
                    theChart.Legends["Legend"].Font = smallFont;
                }
    
    
                foreach (Series series in theChart.Series)
                {
                    series.BorderWidth = 3;
    
                }
    
                theChart.Width = 1800;
                theChart.Height = 1200;
    
                SaveFileDialog save = new SaveFileDialog();
                save.DefaultExt = ".png";
                if (save.ShowDialog() == DialogResult.OK)
                {
                    theChart.SaveImage(save.FileName, ChartImageFormat.Png);
                }
                resetOldValues();
    
            }
    
            private void resetOldValues()
            {
                if (theChart.Titles.Count > 0)
                {
                    theChart.Titles[0].Font = oldFont1;
                }
    
                theChart.ChartAreas[0].AxisX.TitleFont = oldFont3;
                theChart.ChartAreas[0].AxisX.LineWidth = oldLineWidth1;
                theChart.ChartAreas[0].AxisX.MajorGrid.LineWidth = oldLineWidth4;
                theChart.ChartAreas[0].AxisX.LabelStyle.Font = oldFont2;
                theChart.ChartAreas[0].AxisX.MajorTickMark.LineWidth = oldLineWidth2;
    
                theChart.ChartAreas[0].AxisY.TitleFont = oldFont3;
                theChart.ChartAreas[0].AxisY.LineWidth = oldLineWidth1;
                theChart.ChartAreas[0].AxisY.MajorGrid.LineWidth = oldLineWidth4;
                theChart.ChartAreas[0].AxisY.LabelStyle.Font = oldFont2;
                theChart.ChartAreas[0].AxisY.MajorTickMark.LineWidth = oldLineWidth2;
                if (theChart.Legends.Count > 0)
                {
                    theChart.Legends["Legend"].Font = oldLegendFont;
                }
    
    
    
                foreach (Series series in theChart.Series)
                {
                    series.BorderWidth = oldLineWidth3;
    
                }
    
                theChart.Width = oldWidth;
                theChart.Height = oldHeight;
                theChart.Visible = true;   
            }  
        }
    }
    

提交回复
热议问题