`
laowood
  • 浏览: 119563 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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[0]=data1_1;
			dr1_1[1]=name1_1;
			dr1_1[2]=max1;
			dr1_1[3]=title1;
			dr1_1[4]=subTitle1;
			DataRow dr1_2=dt1.NewRow();
			dr1_2[0]=data1_2;
			dr1_2[1]=name1_2;
			dr1_2[2]=max1;
			dr1_2[3]=title1;
			dr1_2[4]=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[0]=data2_1;
			dr2_1[1]=name2_1;
			dr2_1[2]=max2;
			dr2_1[3]=title2;
			dr2_1[4]=subTitle2;
			DataRow dr2_2=dt2.NewRow();
			dr2_2[0]=data2_2;
			dr2_2[1]=name2_2;
			dr2_2[2]=max2;
			dr2_2[3]=title2;
			dr2_2[4]=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[0]=data3_1;
			dr3_1[1]=name3_1;
			dr3_1[2]=max3;
			dr3_1[3]=title3;
			dr3_1[4]=subTitle3;
			dr3_2[0]=data3_2;
			dr3_2[1]=name3_2;
			dr3_2[2]=max3;
			dr3_2[3]=title3;
			dr3_2[4]=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[0]=data4_1;
			dr4_1[1]=name4_1;
			dr4_1[2]=max4;
			dr4_1[3]=title4;
			dr4_1[4]=subTitle4;
			dr4_2[0]=data4_2;
			dr4_2[2]=max4;
			dr4_2[1]=name4_2;
			dr4_2[3]=title4;
			dr4_2[4]=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[k];
 
					float highPoint = float.Parse(dt.Rows[0][2].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[0][3].ToString(),new Font("Tahoma",16,FontStyle.Bold),Brushes.Black,new PointF(5+(k*SIDE_LENGTH),5)); 
					
					//画小标题 
					g.DrawString(dt.Rows[0][4].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[i][0]) * 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[i][1].ToString() + " - " + dt.Rows[i][0].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); 
			} 
		} 
	} 
}

 

 

2
0
分享到:
评论

相关推荐

    C#画图板-直线、曲线、矩形

    C#画图板包含直线、曲线、矩形等,还可以选择线条颜色。

    C#画图教程ppt

    C#画图教程ppt

    c#画图源码,初学者可以来看看

    c#画图源码,可以实现画图的基本功能,有新的想法可以放松邮件到decil_cpp@163.com

    C#画图控件ZedGraph

    ZedGraph是用于创建任意数据的二维线型、条型、饼型图表的一个类库,也可以作为Windows窗体用户控件和ASP网页控件(这里有个web- accessible 不知道该怎么翻译)。这个类库具有高度的适应性,几乎所有式样的图表都...

    C#画图教程画图教程

    画图教程画图教程画图教程画图教程画图教程画图教程画图教程画图教程画图教程画图教程画图教程画图教程画图教程画图教程画图教程画图教程画图教程画图教程画图教程

    c#画图工具实现

    最新的c#画图工具实现,功能描述如下:铅笔,刷子,直线,填充,矩形,圆形。 可改变线宽以及线条的颜色。使用该程序的时候记得一定要点新建,不然没法运行。可保存多个格式。随便做个任务就能下载哟,希望能对大家...

    基于C#画图板DrawingBoard V1.1.0

    **程序有无问题很难说** 开发软件:Rider 需要:.Net FrameWork 4.8、网络 效果:https://link2points.blog.csdn.net/article/details/115840463

    C#画图板程序

    C#编写的画图板程序,能实现画刷、画笔,以及直线方形和椭圆等功能,还有文件菜单栏的相关功能

    c#画图

    c#画图c#画图c#画图c#画图c#画图c#画图c#画图c#画图c#画图c#画图c#画图c#画图c#画图c#画图c#画图c#画图c#画图c#画图c#画图c#画图c#画图c#画图

    C#画图板源代码C#画图板源代码

    C# 画图板 源代码

    c#画图小程序

    c#写的画图小程序,可以作为课程设计,为设计自己的画图画图程序作参考

    c# 画图板

    c# 画图板 画直线 画矩形 画椭圆 等等

    C#画图程序

    根据老师的作业要求自己写的,一个C#画图程序。运用了面向对象的思想,继承和多态。

    c#画图事例加源码Graph

    c#画图,c#画图事例,c#画图,c#画图事例加源码

    C#画图板程序源码.rar

    C#画图板程序源码

    c#画图橡皮线效果c#画图橡皮线效果

    c# 画图 橡皮线,采用ControlPaint.DrawReversibleFrame实现橡皮线效果

    c# 画图工具源码

    画图完毕后可以保存。打开方式自动注册为该应用程序打开;重新打开后仍然可以编辑之前的线圆等.....;

    C# 实现画图软件

    C# 画图 可实现调色板 铅笔 圆形 矩形 保存 等基本画图功能

    C#简易画图程序源码

    这是一个简单的C#画图程序

    C#画图三个例子winform

    C#画图例子winform,三个

Global site tag (gtag.js) - Google Analytics