| 发表于:2007-08-07 12:03:4515楼 得分:0 |
//获取数据 dataset ds=getdata1(param1,param2,param3,param4);//自己替换掉 //建立图形对象 graphics objgraphics;//建立画板对象 bitmap objbitmap=new bitmap(1000,500);//建立位图对象 objgraphics=graphics.fromimage(objbitmap);//根据位图对象建立画板对象 objgraphics.clear(color.white);//设置画板对象背景色 //绘制坐标轴 pointf point1=new pointf(30,420);//定义坐标轴原点 pointf point2=new pointf(970,420);//定义横坐标终点 pointf point3=new pointf(30,30);//定义纵坐标终点 pointf point4=new pointf(25,40);//定义箭头左侧点 pointf point5=new pointf(35,40);//定义箭头右侧点 pointf line1start=new pointf(30,320);//定义水平线100单位起点 pointf line1end=new pointf(970,320);//定义水平线100单位终点 pointf line2start=new pointf(30,220);//定义水平线200单位起点 pointf line2end=new pointf(970,220);//定义水平线200单位终点 pointf line3start=new pointf(30,120);//定义水平线300单位起点 pointf line3end=new pointf(970,120);//定义水平线300单位终点 objgraphics.drawline(pens.black,point1,point2);//绘制横坐标 objgraphics.drawline(pens.black,point1,point3);//绘制纵坐标 objgraphics.drawline(pens.black,point3,point4);//绘制左侧箭头线 objgraphics.drawline(pens.black,point3,point5);//绘制右侧箭头线 objgraphics.drawline(pens.yellowgreen,line1start,line1end);//绘制水平线100单位 objgraphics.drawline(pens.yellowgreen,line2start,line2end);//绘制水平线200单位 objgraphics.drawline(pens.yellowgreen,line3start,line3end);//绘制水平线300单位 //获取数据 float[] arrvalues=new float[ds.tables[0].rows.count]; float flag=0;//获取最大的数值 for(int i=0;i <ds.tables[0].rows.count;i++) { arrvalues[i]=float.parse(ds.tables[0].rows[i][0].tostring()); if(arrvalues[i]> flag) { flag=arrvalues[i]; } } int pos=flag.tostring().indexof( ". ");//获取最大值中小数点的索引位置 int count1=0; int countparam1=1;//缩放参数1 int count2=1; float countparam2=1;//缩放参数2 //最大值大于1000(最大值中小数点索引位置大于3) if(pos> 3) { count1=pos-3; for(int i=0;i <count1;i++) { countparam1=countparam1*10; } } //最大值的整数位数 for(int i=1;i <pos;i++) { count2=count2*10; } //最大值最高位的数值大于4的情况下,缩放参数2的值为0.4 if(flag/count2> 4) { countparam2=float.parse( "0.4 "); } //使用缩放参数调整要显示的数值 for(int i=0;i <ds.tables[0].rows.count;i++) { arrvalues[i]=countparam2*float.parse(ds.tables[0].rows[i][0].tostring())/countparam1+1;//加参数以避免实体超出图像范围,加1以避免未达到一个单位的矩形无法显示 } //使用缩放参数调整坐标轴刻度值 float scale1=100*countparam1/countparam2; float scale2=200*countparam1/countparam2; float scale3=300*countparam1/countparam2; if(param5== "1 " ¦ ¦ param5== "3 ") { //绘制调整后的坐标轴刻度值 pointf scalepoint1=new pointf(30,320); pointf scalepoint2=new pointf(30,220); pointf scalepoint3=new pointf(30,120); objgraphics.drawstring(scale1.tostring(),new font( "宋体 ",9),brushes.black,scalepoint1); objgraphics.drawstring(scale2.tostring(),new font( "宋体 ",9),brushes.black,scalepoint2); objgraphics.drawstring(scale3.tostring(),new font( "宋体 ",9),brushes.black,scalepoint3); } //画折线图 for(int j=0;j <arrvalues.length;j++) { if(j> 0) { int k=j-1; pointf pointa=new pointf((j*65)+60,420-arrvalues[j]);//定义起始点 pointf pointb=new pointf((k*65)+60,420-arrvalues[k]);//定义结束点 objgraphics.drawline(pens.blue,pointa,pointb);//画折线 } //标出数据 pointf dataleg=new pointf((j*65)+50,400-arrvalues[j]); objgraphics.drawstring(ds.tables[0].rows[j][0].tostring(),new font( "宋体 ",9),brushes.red,dataleg); //标出名称 pointf nameleg=new pointf((j*65)+50,440); string name=ds.tables[0].rows[j][1].tostring(); string name2= " "; char[] nameelements=name.tochararray(); for(int i=0;i <nameelements.length;i++) { if(i==3 && nameelements.length> 3) { name2=name2+nameelements[i].tostring()+ "\n ";//在第四个字后换行 } else { name2=name2+nameelements[i].tostring(); } } objgraphics.drawstring(name2,new font( "宋体 ",9),brushes.black,nameleg); } //绘制三角形便于突出显示各点 for(int j=0;j <arrvalues.length;j++) { float parama=float.parse( "8.66 "); float paramb=float.parse( "5 "); pointf points0=new pointf((j*65)+60,420-arrvalues[j]-parama); pointf points1=new pointf((j*65)+60-parama,420-arrvalues[j]+paramb); pointf points2=new pointf((j*65)+60+parama,420-arrvalues[j]+paramb); pointf[] points=new pointf[3]{points0,points1,points2}; objgraphics.drawpolygon(pens.green,points); objgraphics.fillpolygon(new solidbrush(color.green),points); } objbitmap.save(response.outputstream,system.drawing.imaging.imageformat.gif); | | |
|