laowood 发表于 2013-1-27 04:52:25

C#画图

翻出以前刚到公司自己做的这个,以前查资料作了半天,发现 现在 有些都忘了 ,贴在此处
 
PanelChart.class
 
using System; using System.IO;//用于文件存取 using System.Data;//用于数据访问 using System.Drawing;//提供画GDI+图形的基本功能 using System.Drawing.Text;//提供画GDI+图形的高级功能 using System.Drawing.Drawing2D;//提供画高级二维,矢量图形功能 using System.Drawing.Imaging;//提供画GDI+图形的高级功能 namespace Comm { public class PanelChart { public PanelChart() { } public Image draw(int width,int height,int max1,string title1,string subTitle1,int data1_1,string name1_1,int data1_2,string name1_2,int max2,string title2,string subTitle2,int data2_1,string name2_1,int data2_2,string name2_2,int max3,string title3,string subTitle3,int data3_1,string name3_1,int data3_2,string name3_2,int max4,string title4,string subTitle4,int data4_1,string name4_1,int data4_2,string name4_2){DataSet ds=new DataSet();DataTable dt1=new DataTable("myDT1");dt1.Columns.Add("data",typeof(System.Int32));dt1.Columns.Add("name",typeof(System.String));dt1.Columns.Add("max",typeof(System.Int32));dt1.Columns.Add("title",typeof(System.String));dt1.Columns.Add("subTitle",typeof(System.String));DataRow dr1_1=dt1.NewRow();dr1_1=data1_1;dr1_1=name1_1;dr1_1=max1;dr1_1=title1;dr1_1=subTitle1;DataRow dr1_2=dt1.NewRow();dr1_2=data1_2;dr1_2=name1_2;dr1_2=max1;dr1_2=title1;dr1_2=subTitle1;dt1.Rows.Add(dr1_1);dt1.Rows.Add(dr1_2);DataTable dt2=new DataTable("myDT2");dt2.Columns.Add("data",typeof(System.Int32));dt2.Columns.Add("name",typeof(System.String));dt2.Columns.Add("max",typeof(System.Int32));dt2.Columns.Add("title",typeof(System.String));dt2.Columns.Add("subTitle",typeof(System.String));DataRow dr2_1=dt2.NewRow();dr2_1=data2_1;dr2_1=name2_1;dr2_1=max2;dr2_1=title2;dr2_1=subTitle2;DataRow dr2_2=dt2.NewRow();dr2_2=data2_2;dr2_2=name2_2;dr2_2=max2;dr2_2=title2;dr2_2=subTitle2;dt2.Rows.Add(dr2_1);dt2.Rows.Add(dr2_2);DataTable dt3=new DataTable("myDT3");dt3.Columns.Add("data",typeof(System.Int32));dt3.Columns.Add("name",typeof(System.String));dt3.Columns.Add("max",typeof(System.Int32));dt3.Columns.Add("title",typeof(System.String));dt3.Columns.Add("subTitle",typeof(System.String));DataRow dr3_1=dt3.NewRow();DataRow dr3_2=dt3.NewRow();dr3_1=data3_1;dr3_1=name3_1;dr3_1=max3;dr3_1=title3;dr3_1=subTitle3;dr3_2=data3_2;dr3_2=name3_2;dr3_2=max3;dr3_2=title3;dr3_2=subTitle3;dt3.Rows.Add(dr3_1);dt3.Rows.Add(dr3_2);DataTable dt4=new DataTable("myDT4");dt4.Columns.Add("data",typeof(System.Int32));dt4.Columns.Add("name",typeof(System.String));dt4.Columns.Add("max",typeof(System.Int32));dt4.Columns.Add("title",typeof(System.String));dt4.Columns.Add("subTitle",typeof(System.String));DataRow dr4_1=dt4.NewRow();DataRow dr4_2=dt4.NewRow();dr4_1=data4_1;dr4_1=name4_1;dr4_1=max4;dr4_1=title4;dr4_1=subTitle4;dr4_2=data4_2;dr4_2=max4;dr4_2=name4_2;dr4_2=title4;dr4_2=subTitle4;dt4.Rows.Add(dr4_1);dt4.Rows.Add(dr4_2);ds.Tables.Add(dt1);ds.Tables.Add(dt2);ds.Tables.Add(dt3);ds.Tables.Add(dt4);return this.Render(width,height,ds,0);}public Image draw(int width,int height,DataSet chartData){return this.Render(width,height,chartData,0);}public Image badRender(int width, int height){const int SIDE_LENGTH = 400; Bitmap bm = new Bitmap(width,height); try{Graphics g = Graphics.FromImage(bm); g.ScaleTransform((Convert.ToSingle(width))/SIDE_LENGTH/4,(Convert.ToSingle(width/4))/SIDE_LENGTH); g.SmoothingMode = SmoothingMode.Default; g.TextRenderingHint = TextRenderingHint.AntiAlias; //设定画布和边 g.Clear(Color.LightGray); g.DrawString("",new Font("Tahoma",22,FontStyle.Bold),Brushes.Black,new PointF(10,5)); //g.DrawString("Sorry,Draw Back Ground Image Error,Please Message Admin!",new Font("Tahoma",22,FontStyle.Bold),Brushes.Black,new PointF(10,5)); g.Dispose(); return bm; }catch(Exception ex){return bm; }}private Image Render(int width, int height,DataSet chartData,int dataLine) { const int SIDE_LENGTH = 400; const int CHART_TOP = 75; const int CHART_HEIGHT = 200; const int CHART_LEFT = 50; const int CHART_WIDTH = 300; //建立一个Graphics对象实例 Bitmap bm = new Bitmap(width,height); try { Graphics g = Graphics.FromImage(bm); //设置条图图形和文字属性 g.ScaleTransform((Convert.ToSingle(width))/SIDE_LENGTH/4,(Convert.ToSingle(width/4))/SIDE_LENGTH); g.SmoothingMode = SmoothingMode.Default; g.TextRenderingHint = TextRenderingHint.AntiAlias; //设定画布和边 g.Clear(Color.White); for(int k=0;k<4;k++){DataTable dt = chartData.Tables; float highPoint = float.Parse(dt.Rows.ToString());g.DrawRectangle(Pens.Black,(SIDE_LENGTH*k),0,SIDE_LENGTH-20,SIDE_LENGTH-1); g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(7)),(SIDE_LENGTH*k)+2,0+1,SIDE_LENGTH-20-4,SIDE_LENGTH-1-4); //画大标题 g.DrawString(dt.Rows.ToString(),new Font("Tahoma",16,FontStyle.Bold),Brushes.Black,new PointF(5+(k*SIDE_LENGTH),5)); //画小标题 g.DrawString(dt.Rows.ToString(),new Font("Tahoma",12),Brushes.Black,new PointF(7+(k*SIDE_LENGTH),35)); //画虚线for(int bl=4;bl>0;bl--){if(highPoint>=99){g.DrawString(""+(int)(highPoint/5)*(5-bl),new Font("Tahoma",9),Brushes.Black,new PointF(CHART_LEFT+(k*SIDE_LENGTH)-25,(CHART_HEIGHT/5)*bl+CHART_TOP-7)); }else{g.DrawString(""+(highPoint/5)*(5-bl),new Font("Tahoma",9),Brushes.Black,new PointF(CHART_LEFT+(k*SIDE_LENGTH)-25,(CHART_HEIGHT/5)*bl+CHART_TOP-7)); }for(int e=CHART_LEFT+(k*SIDE_LENGTH);e<CHART_LEFT+(k*SIDE_LENGTH) + CHART_WIDTH;e=e+20){g.DrawLine(new Pen(Color.Black,1),new Point(e,(CHART_HEIGHT/5)*bl+CHART_TOP),new Point(e+10,(CHART_HEIGHT/5)*bl+CHART_TOP)); }}//画条形图 float barWidth = CHART_WIDTH / (dt.Rows.Count * 2); PointF barOrigin = new PointF(CHART_LEFT + (barWidth / 2),0); float barHeight = dt.Rows.Count; for(int i=0;i<dt.Rows.Count;i++) {barHeight = Convert.ToSingle(dt.Rows) * 200 / highPoint * 1; barOrigin.Y = CHART_TOP + CHART_HEIGHT - barHeight; g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)),barOrigin.X+(k*SIDE_LENGTH),barOrigin.Y,barWidth-40,barHeight); barOrigin.X = barOrigin.X + (barWidth * 2)-50; } //设置边 g.DrawLine(new Pen(Color.Black,2),new Point(CHART_LEFT+(k*SIDE_LENGTH),CHART_TOP),new Point(CHART_LEFT+(k*SIDE_LENGTH),CHART_TOP + CHART_HEIGHT)); g.DrawLine(new Pen(Color.Black,2),new Point(CHART_LEFT+(k*SIDE_LENGTH),CHART_TOP + CHART_HEIGHT),new Point(CHART_LEFT+(k*SIDE_LENGTH) + CHART_WIDTH,CHART_TOP + CHART_HEIGHT)); //画图例框和文字 g.DrawString("图表说明",new Font("Tahoma",14,FontStyle.Bold),Brushes.Black,new PointF(200+(k*SIDE_LENGTH),300)); //画图例 PointF boxOrigin = new PointF(210+(k*SIDE_LENGTH),330); PointF textOrigin = new PointF(235+(k*SIDE_LENGTH),326); for(int i=0;i<dt.Rows.Count;i++) { g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)),boxOrigin.X,boxOrigin.Y,20,10); g.DrawRectangle(Pens.Black,boxOrigin.X,boxOrigin.Y,20,10); g.DrawString(dt.Rows.ToString() + " - " + dt.Rows.ToString(),new Font("Tahoma",10),Brushes.Black,textOrigin); boxOrigin.Y += 15; textOrigin.Y += 15; } //输出图形 PointF textOrigin1=new PointF(50+(k*SIDE_LENGTH),70);g.DrawString("MAX - "+highPoint,new Font("Tahoma",12),Brushes.Black,textOrigin1);}g.Dispose(); return bm; } catch { return this.badRender(width,height); } } } } 
 
页: [1]
查看完整版本: C#画图