Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何调整图表的大小而不是屏幕分辨率?_C#_Winforms_Charts - Fatal编程技术网

C# 如何调整图表的大小而不是屏幕分辨率?

C# 如何调整图表的大小而不是屏幕分辨率?,c#,winforms,charts,C#,Winforms,Charts,我有一个带折线图的C#4.7 WinForms应用程序。我想以非常大的分辨率保存图表图像,例如10000x2000。以下是我存档的内容: Form1.Width = 3860; //my screen width resolution - maximum allowed Form1.Height = 1080; //my screen height resolution - maximum allowed chart1.Dock = DockStyle.Fill; chart1.SaveImag

我有一个带折线图的C#4.7 WinForms应用程序。我想以非常大的分辨率保存图表图像,例如10000x2000。以下是我存档的内容:

Form1.Width = 3860; //my screen width resolution - maximum allowed
Form1.Height = 1080; //my screen height resolution - maximum allowed
chart1.Dock = DockStyle.Fill;
chart1.SaveImage(saveFile.FileName, ChartImageFormat.Jpeg);
该代码以3860x1080分辨率保存jpeg图像,我可以放大所需的点。但这还不够,我想把我的表格或图表扩大到 得到像10000x2000这样的图像,VS说它不能比我的屏幕大。 我在这个图表上有很多数据,所以更大的表格为我提供了更多的图表数据。图片是其他人查看最大信息所必需的

我怎么做呢?

这很简单

您只需在代码中创建
图表
,而不在屏幕上显示

现在,您可以根据需要调整其大小..:

Chart bigChart = new Chart();
bigChart.ChartAreas.Add("ca");
Series s1 = bigChart.Series.Add("s1");
s1.BorderWidth = 5;
s1.ChartType = SeriesChartType.Line;

// testdata 

Random rnd = new Random(8);
for (int i = 0; i < 111; i++)
{
    s1.Points.AddXY(rnd.Next(123) + i, rnd.Next(12 * i)) ;
}

bigChart.Size = new Size(10000, 8000);

bigChart.SaveImage(filename, ChartImageFormat.Png);
Chart bigChart=新图表();
bigChart.ChartAreas.Add(“ca”);
系列s1=bigChart.Series.Add(“s1”);
s1.边界宽度=5;
s1.ChartType=系列ChartType.Line;
//测试数据
随机rnd=新随机(8);
对于(int i=0;i<111;i++)
{
s1.点加XY(rnd.Next(123)+i,rnd.Next(12*i));
}
bigChart.Size=新尺寸(10000,8000);
SaveImage(文件名,ChartImageFormat.Png);
请注意:

  • 您可能还需要添加一个
    图例
    ,因为动态创建的
    图表
    没有任何默认元素

  • 如果需要,可以使用现有的图表,将其内容序列化为文件(或流),然后将其加载(反序列化)到大图中

  • 当尺寸大幅增长时,MSChart的自动智能性往往会达到某个极限;因此,请做好调整线宽、字体等设置的准备

  • 您还可能希望加载保存的图像,并将dpi设置为大于默认值(即屏幕分辨率)的值

  • 最后一句话:有时最好将图表保存为向量格式;SaveImage方法中也提供了这些选项

更新:也许你想像Jimi最后的评论那样,将矢量和像素格式结合起来


你可能想学习这篇文章,它讨论了一些一般性的选择。

VS是正确的;不能使窗体比屏幕大。这是因为用户需要查看表单才能访问诸如关闭框、工具栏、边缘等内容,因此比屏幕大的表单将不可用。如果您愿意,我们可能会提供帮助。这不是用户应用程序,仅供个人使用。我需要一个非常大的图片,我的图形与最大的信息,如点etcScreen是不够的,我无论如何。我需要把这张图发送给analitics departmet,这样他们才能看到它的最大信息。所以我需要一个非常大的图形图片。我正要说你在编辑中添加了什么:
ChartImageFormat.Emf
保存一个可读的(AI、CorelDraw等)矢量版本的图表。它可以以任何分辨率或大小打印。非常感谢,TaW,我刚刚从表单控件中删除了chart1并调整了它的大小-这很有效并保存了图例。我想增加dpi,如何才能做到这一点,没有属性dpi?恐怕您必须在保存后加载图像,然后使用bitmap.SetResolution()再次保存。如果您使用png,正如您应该使用的那样(!)质量将不会受到影响。@Elperro请尝试类似的方法:
chart1.SaveImage(@“X:\chart1.emf”,ChartImageFormat.emf);使用(var bmp=new Bitmap(10000,2000))使用(var g=Graphics.frommage(bmp)){g.DrawImage(Image.FromFile(@“X:\chart1.emf”,true),新矩形(Point.Empty,bmp.Size));bmp.Save(@“X:\chart1.png”,ImageFormat.png);}
@Elperro您可以使用
bmp.SetResolution(300f,300f)指定DPI分辨率(300 dpi)。