下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、01.using System;02.using System.Collections.Generic;03.using System.Linq;04.using System.Text;05./06.using System.Drawing;07./08.namespace DatePrint09.10. / <summary>11. / 根据统计数据,输出各种统计图形,包括饼状图、曲线分析图、柱形 图、多组数据曲线分析图;12. / 统计图形统一大小: 600*420;13. / 开发人员:#;14. / 开发时间:#;15. / </summary>16. pub
2、lic class CountImage17. 18. #region / 颜色,画框,19. / <summary>20. / 生成随机颜色21. / </summary>22. / <returns></returns>23. private static Color GetRandomColor(int seed)24. 25. Random random = new Random(seed);26.int r = 0;27.int g = 0;28.int b = 0;29. r = random.Next(0, 230);30. g =
3、 random.Next(0, 230);31. b = random.Next(0, 235);32. Color randomcolor = Color.FromArgb(r, g, b);33. return randomcolor;34. 35. / <summary>36. / 绘制区域框,框何其阴影37. / </summary>38. / <param name="image"> 图形 </param>39. / <param name="rect"> 矩形框对象 </par
4、am>40. / <returns> 图形 </returns>41. private static Bitmap DrawRectangle(Bitmap image,Rectangle rect)42. 43. Bitmap Image=image;44. Graphics g = Graphics.FromImage(Image);45. g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;46. g.SmoothingMode = System.Drawing.Draw
5、ing 2D.SmoothingMode.AntiAlias;47. try48. 49. Rectangle rn =new Rectangle(rect.X +3,rect.Y +3,rect.Width,rect.Height); 50.SolidBrush brush1 = new SolidBrush(Color.FromArgb(233, 234, 249); 51.SolidBrush brush2 = new SolidBrush(Color.FromArgb(221, 213, 215);52. /53. g.FillRectangle(brush2, rn);54. g.F
6、illRectangle(brush1, rect);55. return Image;56. 57. finally58. 59. g.Dispose();60. 61. 62. #endregion63. #region /绘制图例框,绘制扇形64. / <summary>65. / 绘制图例信息66. / </summary>67. / <param name="image"> 图像 </param>68. / <param name="rect"> 第一个矩形框 </param&g
7、t;69. / <param name="c"> 颜色 </param>70. / <param name="DesStr"> 图例说明文字 </param>71. / <param name="f"> 文字样式 </param>72. / <param name="i"> 图例说明序号 </param>73. / <returns> 图形 </returns>74. private static
8、 Bitmap DrawDes(Bitmap image,Rectangle rect,Color c,string DesStr,Font f,int i)75. 76. Bitmap Image = image;77. Graphics g = Graphics.FromImage(Image);78. g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;79. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;80.
9、try81. 82.SolidBrush brush = new SolidBrush(c);83. /84. Rectangle R =new Rectangle(rect.X,rect.Y +18*i,rect.Width,rect.Height);85. Point p = new Point(rect.X + 12, rect.Y + 18 * i);86. / ?颜色矩形框87. g.FillRectangle(brush,R);88. / 文字说明89. g.DrawString(DesStr, f, new SolidBrush(Color.Black), p);90. retu
10、rn Image;91. 92. finally93. 94. g.Dispose();95. 96. 97. / 绘制扇形98. private static Bitmap DrawPie(Bitmap image, Rectangle rect, Color c, int Angle1, int Angle2)99. 100. Bitmap Image = image;101. Graphics g = Graphics.FromImage(Image);102. g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.Ant
11、iAlias;103. g.SmoothingMode = System.Drawing.Drawing 2D.SmoothingMode.AntiAlias;104. try105. 106.SolidBrush brush = new SolidBrush(c);107. /108. Rectangle R = new Rectangle(rect.X, rect.Y, rect.Width, rect.Height);109. g.FillPie(brush, R, Angle1, Angle2);110. return Image;111. 112. finally113. 114.
12、g.Dispose();115. 116. 117. #endregion118. #region/ 绘制基本图形119. / <summary>120. / 生成图片,统一设置图片大小、背景色 ,图片布局,及标题121. / </summary>122. / <returns> 图片 </returns>123. private static Bitmap GenerateImage(string Title)124. 125. / 图片大小:宽度、高度126.int width = 600;127.int height = 420;128.
13、/ 标题129. Point PTitle=new Point(30,20);130. Font f1 = new Font("宋体", 10, FontStyle.Bold);131. /线132. Point PLine1=new Point(20,40);133. Point PLine2=new Point(390,40);134. Pen pen = new Pen(new SolidBrush(Color.FromArgb(8,34,231),1.5f);135. / 主区域 ,主区域图形136. Rectangle RMain1=new Rectangle(2
14、0,55,410,345);137. Rectangle RMain2=new Rectangle(25,60,400,335);138. / 图例区域139. Rectangle RDes1=new Rectangle(440,55,150,345);140. / 图例说明141. string Des="图例说明:142. Font f2 = new Font("新宋体", 9, FontStyle.Bold);143. Point PDes=new Point(445,65);144. /图例信息,后面的 x 坐标上累加 20145. Rectangle R
15、Des2=new Rectangle(445,90,10,10);146. Bitmap image = new Bitmap(width, height);147. /148. Graphics g = Graphics.FromImage(image);149. g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;150. g.SmoothingMode = System.Drawing.Drawing 2D.SmoothingMode.AntiAlias;151. try152. 153. / 设置背
16、景色、绘制边框154. g.Clear(Color.White);155. g.DrawRectangle(new Pen(Color.Black), 0, 0, width - 1, height - 1);156. / 绘制标题、线157. g.DrawString(Title, f1, new SolidBrush(Color.Black),PTitle);158. g.DrawLine(pen, PLine1, PLine2);159.160./ 主区域161.image = DrawRectangle(image, RMain1);162./ 图例区域163.image = Draw
17、Rectangle(image, RDes1);164. / 图“例说明 ”165. g.DrawString(Des, f2, new SolidBrush(Color.Black), PDes);166. /return167. return image;168. 169. finally170. 171. g.Dispose();172. 173. 174. #endregion175. #region / 绘制饼状图176. / <summary>177. / 计算数值综合178. / </summary>179. / <param name="
18、Value"></param>180. / <returns></returns>181. private static decimal Sum(decimal Value)182. 183. decimal t=0;184. foreach (decimal d in Value)185. 186. t += d;187. 188. return t;189. 190. / <summary>191. / 计算各项比例192. / </summary>193. / <param name="Value
19、"></param>194. / <returns></returns>195. private static decimal GetItemRate(decimal Value)196. 197. decimal sum = Sum(Value);198. decimal ItemRate = new decimalValue.Length;199. for (int i = 0; i < Value.Length; i+)200. 201.ItemRatei = Valuei / sum;202. 203. return ItemR
20、ate;204. 205. / <summary>206. / 根据比例,计算各项角度值207. / </summary>208. / <param name="ItemRate"></param>209. / <returns></returns>210. private static int GetItemAngle(decimal ItemRate)211. 212.int ItemAngel = new intItemRate.Length;213. for (int i = 0; i <
21、 ItemRate.Length; i+)214. 215. decimal t=360*ItemRatei;216.ItemAngeli = Convert.ToInt32(t);217. 218. return ItemAngel;219. 220. / <summary>221. / 绘制饼图 (主要是分析不同类型的数值所占比例 ),参数有图的标题, 项目名称,项目的数值,名称和数值都是长度对应的222. / </summary>223. / <param name="Title"> 图的标题 </param>224.
22、/ <param name="ItemName"> 项目名称 </param>225. / <param name="ItemValue"> 项目的数值 </param>226. / <returns>Bitmap 图形 </returns>227. public static Bitmap GetPieImage(stringTitle,stringItemName,decimalItemValue)228. 229. Bitmap image = GenerateImage(Ti
23、tle);230. /231. / 主区域图形232. Rectangle RMain = new Rectangle(35, 70, 380, 300);233. / 图例信息234. Rectangle RDes = new Rectangle(445, 90, 10, 10);235. Font f = new Font("新宋体 ", 9, FontStyle.Bold);236. Graphics g = Graphics.FromImage(image);237. g.TextRenderingHint = System.Drawing.Text.TextRen
24、deringHint.AntiAlias;238. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;239. try240. 241. / 分析数据,绘制饼图和图例说明242. decimal ItemRate = GetItemRate(ItemValue);243.int ItemAngle = GetItemAngle(ItemRate);244.int Angle1 = 0;245.int Angle2 = 0;246.int len = ItemValue.Length;247. Color c =
25、 new Color();248. /3D249. g.DrawPie(new Pen(Color.Black), RMain, 0F, 360F);250. g.DrawPie(new Pen(Color.Black),new Rectangle(RMain.X,RMain.Y +10,RMain.Width, RMain.Height), 0F, 360F);251. g.FillPie(new SolidBrush (Color.Black), new Rectangle(RMain.X, RMain.Y +10, RMain.Width, RMain.Height), 0F, 360F
26、);252. / 绘制253. for (int i = 0; i < len; i+)254. 255. Angle2 = ItemAnglei;256. /if (c != GetRandomColor(i)257. c = GetRandomColor(i);258.SolidBrush brush=new SolidBrush(c);259. stringDesStr=ItemNamei+"("+(ItemRatei*100).ToString(".00")+"%"+")"+ItemValuei.To
27、S tring(".00");260. /261. DrawPie(image, RMain, c, Angle1, Angle2);262. Angle1 += Angle2;263. DrawDes(image, RDes, c, DesStr, f, i);264. 265. return image;266. 267. finally268. 269. g.Dispose();270. 271. 272. #endregion273. #region / 获取 Y轴坐标数据274. /*275. 坐标轴实现算法描述:276. * X 轴坐标根据项目数量把 X轴均等分
28、,有效长度 350,277. * Y轴有效长度 280,平分为 10个等分,即有十个点;278. * Y 轴的数值算法:第一个点位最小值,然后每个等分所对应的值是(最大值 -最小值) /9,279. */280. / <summary>281. / 获取 Y 轴坐标的点分布值282. / </summary>283. / <param name="ItemValue"> 项目数值 </param>284. / <param name="YCount">Y 轴点的数量 </param>
29、285. / <returns> 图形 </returns>286. private static int GetYValue(decimal ItemValue,int YCount)287. 288.int len = ItemValue.Length;289.int Value = new intYCount;290.int Max = Convert.ToInt32(ItemValue.Max();291.int Min = Convert.ToInt32(ItemValue.Min();292.int Distance = Convert.ToInt32(Ma
30、x-Min)/(YCount-1);293. for (int i = 0; i < YCount; i+)294. 295. Valuei = Min + Distance * i;296. 297. /ValueYCount - 1 = Max;298. return Value;299. 300. #endregion301. #region / 建立坐标轴302. / <summary>303. / 绘制坐标轴, X、Y 轴的坐标值304. / </summary>305. / <param name="image"> 图像
31、 </param>306. / <param name="ItemName"> 项目名称 </param>307.308.309.ItemValue)310.311.312.313.314.315.316.317.318.319.320.321.322.323.324.325.326.327.328.329.330.331.332.333.334.335.336.337.338.339.340. / <param name="ItemValue"> 项目数值 </param>/ <retu
32、rns> 图像 </returns>private static Bitmap DrawCoordinate(Bitmap image,stringItemName,decimal/ 坐标轴Point P0 = new Point(60, 360);Point Px = new Point(420, 360);Point Py = new Point(60, 65);Pen pen=new Pen(Color.Black);/ 箭头Point Py1=new Point(58,70);Point Py2=new Point(62,70);Point Px1=new Point
33、(415,358);Point Px2=new Point(415,362);/Y,X Value/y 280-10int YCount = 10;/Y 轴点的数量int YDistance = Convert.ToInt32(280/YCount) ;/Y轴点击的距离int YValue = GetYValue(ItemValue, YCount);int len = 3;/ 短线的长度int XCount = ItemName.Length;/X 轴点的数量int XDistance = Convert.ToInt32(350/XCount);/X轴点间的距离/Font f = new F
34、ont("新宋体 ", 8, FontStyle.Bold);/ImageGraphics g = Graphics.FromImage(image);g.TextRenderingHint =System.Drawing.Text.TextRenderingHint.AntiAlias;g.SmoothingMode =System.Drawing.Drawing2D.SmoothingMode.AntiAlias;try / 绘制坐标轴线g.DrawLine(pen, P0, Px);g.DrawLine(pen, P0, Py);/ 箭头341. g.DrawLine
35、(pen, Py, Py1);342. g.DrawLine(pen, Py, Py2);343. g.DrawLine(pen, Px, Px1);344. g.DrawLine(pen, Px, Px2);345. /X346. for (int i = 1; i <= XCount; i+)347. 348. Point pl1 = new Point(P0.X+i*XDistance,P0.Y);349. Point pl2 = new Point(P0.X + i * XDistance, P0.Y - len);350. string str=ItemNamei - 1;35
36、1. Point ps = new Point(pl1.X-(str.Length*8),pl1.Y+5);352. g.DrawLine(pen, pl1, pl2);353. g.DrawString(str, f, new SolidBrush(Color.Black), ps);354. 355. /Y356. for (int i = 1; i <= YCount; i+)357. 358. Point pl1 = new Point(P0.X, P0.Y-YDistance*i);359. Point pl2 = new Point(pl1.X+len, pl1.Y);360
37、. string str=YValuei-1.ToString();361. Point ps = new Point(pl1.X - str.Length*8, pl1.Y - 5);362. g.DrawLine(pen, pl1, pl2);363. g.DrawString(str, f, new SolidBrush(Color.Black), ps);364. 365. /0366. g.DrawString("0",f,new SolidBrush(Color.Black),new Point(P0.X-10,P0.Y-10);367. /return368.
38、 return image;369. 370. finally371. 372. g.Dispose();373. 374. 375. #endregion376.377. #region / 获取某个数值在坐标系中的位置378. / <summary>379. / 获取某个数值在坐标系中的位置380. / </summary>381. / <param name="Value"> 当前数值 </param>382. / <param name="ItemValue"> 所有数值 </pa
39、ram>383. / <returns> 位置 </returns>384. private static int GetCoordinateValue(decimal Value,decimal ItemValue)385. 386. /y 280-10387. /get y YValue=GetYValue(ItemValue,10);389.int Max = YValue.Max();390.int Min = YValue.Min();391.float AvgDis = (Max - Min) / 9;392.float tt
40、 = (Convert.ToSingle(Value) - Min) / AvgDis;393.int m = Convert.ToInt32(tt*28);394. m = 360 - 28 - m;395. /if(Convert.ToInt32(Value) >= Max)396. /m=80;397. /else if (Convert.ToInt32(Value) <= Min)398. /m=332;399. return m;400. 401. #endregion402. #region / 绘制曲线图 *403. / <summary>404. / 绘
41、制曲线图 (主要是分析不同类型的数值所占比例,或者同意项目不 同状态下的值和趋势 ),参数有图的标题,项目名称,项目的数值,名称和数值 都是长度对应的405. / </summary>406. / <param name="Title"> 图的标题 </param>407. / <param name="ItemName"> 项目名称 </param>408. / <param name="ItemValue"> 项目的数值 </param>409.
42、/ <returns>Bitmap 图形 </returns>410. public static Bitmap GetLineImage(string Title,stringItemName,decimalItemValue)411. 412. Bitmap image = GenerateImage(Title);413.image = DrawCoordinate(image, ItemName, ItemValue);414. Graphics g = Graphics.FromImage(image);415. g.TextRenderingHint = S
43、ystem.Drawing.Text.TextRenderingHint.AntiAlias;416. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;417. try418. 419.int PNum = ItemName.Length;420. Point Pts = new PointPNum;421. / 坐标轴422. Point P0 = new Point(60, 360);423. Point Px = new Point(420, 360);424. Point Py = new Point
44、(60, 65);425. Pen pen = new Pen(Color.Black);426. /427.int XCount = ItemName.Length;/X 轴点的数量428.int XDistance = Convert.ToInt32(350 / XCount);/X轴点间的距离429. / 图例430. Rectangle RDes = new Rectangle(445, 90, 10, 10);431. Font f = new Font("新宋体 ", 9, FontStyle.Bold);432. /433. for (int i = 0; i
45、 < PNum; i+)434. 435.int x=P0.X + (i+1) * XDistance;436.int y = GetCoordinateValue(ItemValuei, ItemValue);437. Ptsi = new Point(x, y);438. 439. / 把点连起来440. for (int i = 1; i < PNum; i+)441. 442. g.DrawLine(pen, Ptsi - 1, Ptsi);443. 444. / 画图例说明445. Color c = GetRandomColor(3);446. for (int i =
46、 0; i < PNum; i+)447. 448. string str = ItemNamei + ":" + ItemValuei.ToString();449. DrawDes(image, RDes, c, str, f, i);450. 451. /return452. return image;453. 454. finally455. 456. g.Dispose();457. 458. 459. #endregion460. #region / 绘制柱状图461. / <summary>462. / 绘制柱状图 (主要是分析某一个项目在不
47、同状态下的值,获取其发展 趋势),参数有图的标题,项目名称,项目的数值,名称和数值都是长度对应的463. / </summary>464. / <param name="Title"> 图的标题 </param>465. / <param name="ItemName"> 项目名称 </param>466. / <param name="ItemValue"> 项目的数值 </param>467. / <returns>Bitmap 图形
48、</returns>468. public static Bitmap GetColumnImage(string Title,stringItemName,decimal510. string str = ItemNamei + ":" + ItemValuei.ToString();511. DrawDes(image, RDes, c, str, f, i);512. 513. /return514. return image;515. 516. finally517. 518. g.Dispose();519. 520. 521. #endregion5
49、22. #region / 绘制多组数据曲线图 *523. / <summary>524. / 获取二维数组中的最大值525. / </summary>526. / <param name="ItemValues"></param>527. / <returns></returns>528. private static int GetMax(decimal ItemValues)529. 530.int Max = 0;531.for (int i = 0; i < ItemValues.Len
50、gth; i+)532.533.int t = Convert.ToInt32(ItemValuesi.Max();534.if (i = 0)535.Max = t;536.if (Max <= t)537. Max = t;538. 539. return Max;540. 541. / <summary>542. / 获取二维数组中的最小值543. / </summary>544. / <param name="ItemValues"></param>545. / <returns></retur
51、ns>546. private static int GetMin(decimal ItemValues)547. 548.int Min = 0;549.for (int i = 0; i < ItemValues.Length; i+)550.551.int t = Convert.ToInt32(ItemValuesi.Min();552.if (i = 0)553.Min = t;554.if (Min >= t)555. Min = t;556. 557. return Min;558. 559. / <summary>560. / 获取 Y 轴上点的数
52、值561. / </summary>562. / <param name="ItemValues"></param>563. / <param name="YCount"></param>564. / <returns></returns>565. private static int GetYValue(decimal ItemValues, int YCount)566. 567.int Value = new intYCount;568.int Max = GetM
53、ax(ItemValues);569.int Min = GetMin(ItemValues);570.int Distance = Convert.ToInt32(Max - Min) / (YCount - 1);571. for (int i = 0; i < YCount; i+)572. 573. Valuei = Min + Distance * i;574. 575. /ValueYCount - 1 = Max;576. return Value;577. 578. / <summary>579. / 获取某个数值在坐标系中的位置580. / </sum
54、mary>581. / <param name="Value"> 当前数值 </param>582. / <param name="ItemValue"> 所有数值 </param>583. / <returns> 位置 </returns>584. private static int GetCoordinateValue(decimal Value, decimal ItemValues)585. 586. /y 280-10587. /get y
55、 YValue = GetYValue(ItemValues, 10);589.int Max = GetMax(ItemValues);590.int Min = GetMin(ItemValues);591.float AvgDis = (Max - Min) / 9;592.float tt = (Convert.ToSingle(Value) - Min) / AvgDis;593.int m = Convert.ToInt32(tt * 28);594. m = 360 - 28 - m;595. return m;596. 597. / <summary>598. /
56、绘制坐标轴, X、Y 轴的坐标值599. / </summary>600. / <param name="image"> 图像 </param>601. / <param name="ItemName"> 项目名称 </param>602. / <param name="ItemValue"> 多组项目数值 </param>603. / <returns> 图像 </returns>604. private static Bit
57、map DrawCoordinate(Bitmap image,string ItemName, decimalItemValues)605. 606. / 坐标轴607. Point P0 = new Point(60, 360);608. Point Px = new Point(420, 360);609. Point Py = new Point(60, 65);610. Pen pen=new Pen(Color.Black);611. / 箭头612. Point Py1=new Point(58,70);613. Point Py2=new Point(62,70);614. P
58、oint Px1=new Point(415,358);615. Point Px2=new Point(415,362);616. /Y,X Value617. /y 280-10618.int YCount = 10;/Y 轴点的数量619.int YDistance = Convert.ToInt32(280/YCount) ;/Y轴点击的距离620.int YValue = GetYValue(ItemValues, YCount);621.int len = 3;/ 短线的长度622.int XCount = ItemName.Length;/X 轴点的数量623.int XDistance = Convert.ToInt32(350/XCount);/X轴点间的距离624. /625. Font f = new Font("新宋体 ", 8, FontStyle.Bold)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 呼吸系统解剖与生理护理
- 2026贵州贵阳市阅山湖小学春季临聘教师招聘6人考试参考题库及答案解析
- 2026年安徽医科大学临床医学院博士人才引进45名考试备考试题及答案解析
- 2026年蚌埠市工农小学招聘小学英语教师笔试参考题库及答案解析
- 2026年青岛酒店管理职业技术学院单招职业技能考试题库及答案解析
- 2025年江阴职业技术学院单招职业适应性测试题库及答案解析
- 2026辽宁大连市旅顺口区征兵笔试模拟试题及答案解析
- 2026年嘉兴平湖农商银行春季招聘考试备考题库及答案解析
- 推动公共数据运营培育数某省市场
- 2026年阜阳市颍东区托育综合服务中心等单位劳务派遣人员公开招聘16名笔试模拟试题及答案解析
- 管理系统中计算机应用
- 新大象版四年级下册科学第二单元《自然界的水》课件(共4课)
- 彩钢板屋面拆除、更换屋面板施工方案(改)
- 神经病学课件:运动神经元病
- 外科学小肠疾病课件
- 中国当代文学史试题与答案(8套)
- 椎管内麻醉-椎管内解剖课件
- 第三讲-就业信息的收集与处理课件
- 天津大学讲义-工程成本管理概述
- 环境与可持续发展ppt课件(完整版)
- 商业银行实施资本管理高级方法监管暂行细则
评论
0/150
提交评论