using System; using System.Collections.Generic; using System.Linq; using System.Text; // using System.Drawing; // namespace DatePrint { /// <summary> /// 根据统计数据,输出各种统计统计图形,包括饼状图、曲线分析图、柱形图、多组数据曲线分析图; /// 统计图形统一大小:600*420; /// 开发人员:###; /// 开发时间:###; /// </summary> public class CountImage { #region // 颜色,画框, /// <summary> /// 生成随机颜色 /// </summary> /// <returns></returns> private static Color GetRandomColor(int seed) { Random random = new Random(seed); int r = 0; int g = 0; int b = 0; r = random.Next(0, 230); g = random.Next(0, 230); b = random.Next(0, 235); Color randomcolor = Color.FromArgb(r, g, b); return randomcolor; } /// <summary> /// 绘制区域框,框何其阴影 /// </summary> /// <param name="image">图形</param> /// <param name="rect">矩形框对象</param> /// <returns>图形</returns> private static Bitmap DrawRectangle(Bitmap image,Rectangle rect) { Bitmap Image=image; Graphics g = Graphics.FromImage(Image); g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; try { Rectangle rn = new Rectangle(rect.X + 3, rect.Y + 3, rect.Width, rect.Height); SolidBrush brush1 = new SolidBrush(Color.FromArgb(233, 234, 249)); SolidBrush brush2 = new SolidBrush(Color.FromArgb(221, 213, 215)); // g.FillRectangle(brush2, rn); g.FillRectangle(brush1, rect); return Image; } finally { g.Dispose(); } } #endregion #region //绘制图例框,绘制扇形 /// <summary> /// 绘制图例信息 /// </summary> /// <param name="image">图像</param> /// <param name="rect">第一个矩形框</param> /// <param name="c">颜色</param> /// <param name="DesStr">图例说明文字</param> /// <param name="f">文字样式</param> /// <param name="i">图例说明序号</param> /// <returns>图形</returns> private static Bitmap DrawDes(Bitmap image, Rectangle rect,Color c,string DesStr,Font f,int i) { Bitmap Image = image; Graphics g = Graphics.FromImage(Image); g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; try { SolidBrush brush = new SolidBrush(c); // Rectangle R = new Rectangle(rect.X, rect.Y + 18 * i, rect.Width, rect.Height); Point p = new Point(rect.X + 12, rect.Y + 18 * i); //❀颜色矩形框 g.FillRectangle(brush,R); //文字说明 g.DrawString(DesStr, f, new SolidBrush(Color.Black), p); return Image; } finally { g.Dispose(); } } //绘制扇形 private static Bitmap DrawPie(Bitmap image, Rectangle rect, Color c, int Angle1, int Angle2) { Bitmap Image = image; Graphics g = Graphics.FromImage(Image); g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; try { SolidBrush brush = new SolidBrush(c); // Rectangle R = new Rectangle(rect.X, rect.Y, rect.Width, rect.Height); g.FillPie(brush, R, Angle1, Angle2); return Image; } finally { g.Dispose(); } } #endregion #region//绘制基本图形 /// <summary> /// 生成图片,统一设置图片大小、背景色,图片布局,及标题 /// </summary> /// <returns>图片</returns> private static Bitmap GenerateImage(string Title) { //图片大小:宽度、高度 int width = 600; int height = 420; //标题 Point PTitle=new Point(30,20); Font f1 = new Font("宋体", 10, FontStyle.Bold); //线 Point PLine1=new Point(20,40); Point PLine2=new Point(390,40); Pen pen = new Pen(new SolidBrush(Color.FromArgb(8,34,231)),1.5f); //主区域,主区域图形 Rectangle RMain1=new Rectangle(20,55,410,345); Rectangle RMain2=new Rectangle(25,60,400,335); //图例区域 Rectangle RDes1=new Rectangle(440,55,150,345); //图例说明 string Des="图例说明:"; Font f2 = new Font("新宋体", 9, FontStyle.Bold); Point PDes=new Point(445,65); //图例信息,后面的x坐标上累加20 Rectangle RDes2=new Rectangle(445,90,10,10); Bitmap image = new Bitmap(width, height); // Graphics g = Graphics.FromImage(image); g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; try { //设置背景色、绘制边框 g.Clear(Color.White); g.DrawRectangle(new Pen(Color.Black), 0, 0, width - 1, height - 1); //绘制标题、线 g.DrawString(Title, f1, new SolidBrush(Color.Black),PTitle); g.DrawLine(pen, PLine1, PLine2); //主区域 image = DrawRectangle(image, RMain1); //图例区域 image = DrawRectangle(image, RDes1); //“图例说明” g.DrawString(Des, f2, new SolidBrush(Color.Black), PDes); //return return image; } finally { g.Dispose(); } } #endregion #region //绘制饼状图************************ /// <summary> /// 计算数值综合 /// </summary> /// <param name="Value"></param> /// <returns></returns> private static decimal Sum(decimal[] Value) { decimal t=0; foreach (decimal d in Value) { t += d; } return t; } /// <summary> /// 计算各项比例 /// </summary> /// <param name="Value"></param> /// <returns></returns> private static decimal[] GetItemRate(decimal[] Value) { decimal sum = Sum(Value); decimal[] ItemRate = new decimal[Value.Length]; for (int i = 0; i < Value.Length; i++) { ItemRate