gpt4 book ai didi

c# - 使用 C# 的动态图形(要保存为 PNG 格式)

转载 作者:行者123 更新时间:2023-12-04 12:47:06 26 4
gpt4 key购买 nike

我必须动态生成动态图形,将其保存为 PNG 图像格式(透明背景)以嵌入到 PDF 中。

问题是,图表不会显示在页面中的控件上(WebForm 中没有图表控件),应该从底层信息生成,并且应该在创建 PDF 时嵌入。

PDF 和 PDF 生成的库都已准备就绪。

我想知道如何在没有图表控件的情况下生成动态图形(条形图、饼图)3D 或简单图形,并且能够将其保存为具有透明背景 (.PNG) 的图像。

原因是PDF模板有很多层阴影,因此图形图像周围的背景应该是透明的,类似于下图。

Possible Graph

我已尝试生成类似于以下链接中示例的动态条形图,但图像看起来并不理想

https://2leggedspider.wordpress.com/2004/11/21/generating-a-dynamic-bar-graph-using-aspnet-and-c/

Graph implemented

非常感谢有关该功能的任何帮助。先感谢您。

更新:2016 年 3 月 16 日,星期三

通过 TaW 的回答和更新,我已经能够绘制所需的图表,下面是对我提出的同一问题的回答的更新

添加对 System.Windows.Forms 的引用和 System.Windows.Forms.DataVisualization
添加以下命名空间

using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

下面的方法将为您提供边缘平滑的饼图,如图所示

Pie Chart with Smooth Edges
void Create3DPieChart()
{
/* Utilize the Chart class available in System.Windows.Forms.DataVisualization.Charting */
Chart chart = new Chart();
/* Add a chart area to the chart */
ChartArea CA = chart.ChartAreas.Add("A1");
/* Add data series to the chart and specify the type of Series */
Series S1 = chart.Series.Add("S1");
S1.ChartType = SeriesChartType.Pie;

/* Assign points for the Series */
S1.Points.AddXY(1, 17);
S1.Points.AddXY(2, 27);
S1.Points.AddXY(3, 7);
S1.Points.AddXY(4, 49);

/* Set chart color and other settings as required */
chart.BackColor = Color.Transparent;
CA.BackColor = chart.BackColor;
CA.Area3DStyle.Enable3D = true;
S1.Points[2]["Exploded"] = "true";

/*Assign AntiAliasing to Graphics style for smooth edges*/
chart.AntiAliasing = AntiAliasingStyles.Graphics;

/* Set the image path and save the image as PNG format*/
string imageNameAndPath = string.Concat(Application.StartupPath.Remove(Application.StartupPath.IndexOf("\\bin\\Debug")),
"/TempImages/Image", DateTime.Now.ToString("ddMMyyyyhhmmss") + ".png");
chart.SaveImage(imageNameAndPath, ChartImageFormat.Png);
}

塔瓦。如果我错了,请纠正我。

最佳答案

不幸的是,图表不会直接绘制任何透明度,因此我们需要解决方法..

如果您想创建具有透明背景的 PNG,您可以执行以下操作:

chart1.BackColor = Color.Fuchsia;
chart1.ChartAreas[0].BackColor = chart1.BackColor;
Bitmap bmp = new Bitmap( chart1.ClientSize.Width, chart1.ClientSize.Height);
chart1.AntiAliasing = AntiAliasingStyles.Graphics;
chart1.DrawToBitmap(bmp, chart1.ClientRectangle);
bmp.MakeTransparent(chart1.BackColor);
bmp.Save(yourFileName, ImageFormat.Png);

首先,我们将图表中的一些区域设置为独特的颜色;如果您在图表中使用紫红色(糟糕!),请选择其他颜色。

然后我们创建一个 Bitmap保持图像。

现在我们关闭文本的抗锯齿功能;当我们将背景像素变为透明时,这有助于避免出现有趣的颜色。

现在我们告诉图表控件将自己绘制到我们的位图中。

最后,我们使所有具有我们特殊颜色的像素透明。

现在我们可以保存到磁盘..

您可能需要考虑设置 dpi 分辨率和图表大小,以使结果在您的 pdf 中看起来不错!

更新:

如果您想创建图像而不显示 Chart控制,也没有真正的问题。事实上,您甚至可以创建一个 Chart控制台应用程序中的图像,如果您包含所有必要的命名空间等。

您需要做的就是创建 Chart在代码中并设置所有必要的属性。

这是一个最小的例子:

enter image description here
Chart chart = new Chart();
ChartArea CA = chart.ChartAreas.Add("A1");
Series S1 = chart.Series.Add("S1");
S1.ChartType = SeriesChartType.Pie;

S1.Points.AddXY(1, 17);
S1.Points.AddXY(2, 27);
S1.Points.AddXY(3, 7);
S1.Points.AddXY(4, 49);

chart.BackColor = Color.Fuchsia;
CA.BackColor = chart.BackColor;
CA.Area3DStyle.Enable3D = true;
S1.Points[2]["Exploded"] = "true";
Bitmap bmp = new Bitmap(chart.Width, chart.Height);
chart.AntiAliasing = AntiAliasingStyles.None;
chart.DrawToBitmap(bmp, chart.ClientRectangle);
bmp.MakeTransparent(chart.BackColor);
bmp.Save(yourFileName, ImageFormat.Png);

关于c# - 使用 C# 的动态图形(要保存为 PNG 格式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35719586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com