前段時間項目需要,寫了一個簡單的圖標統計類.決定以后寫點東西到blog來.
using system;
using system.drawing;
using system.drawing.imaging;
using system.drawing.drawing2d;
namespace crystalreportsdemo
...{
/**//// <summary>
/// createreport繪制圖形報表-柱圖。
/// </summary>
public class createreport
...{
public createreport()
...{
//
// todo: 在此處添加構造函數邏輯
//
}
public bitmap createpicturereport(string[] x,int[] y,string reportname)
...{
if(x.length != y.length)
...{
throw new exception("x和y數目不一致");
}
int colnum=y.length;
int colscale=880/(colnum+1);
bitmap bmp = new bitmap(900,700,pixelformat.format24bpprgb);
graphics dc = graphics.fromimage(bmp);
dc.fillrectangle(new solidbrush(color.white),0,0,900,700);
pen scalepen = new pen(color.black,2);
pen gridpen = new pen(color.black,1);
dc.drawline(scalepen,20,680,880,680);
dc.drawline(scalepen,20,680,20,20);
dc.drawline(gridpen,20,20,880,20);
dc.drawline(gridpen,880,20,880,680);
point drawpoint;
int xpoint;
int yheight;
if(colnum==0)
...{
throw new exception("無數據值,colnum值為0作為除數,拋出異常");
}
int drawwidth=880/(4*colnum);
//int drawwidth=580/(4*colnum+1);//4*colnum+1 確保colnum不為0.否則580/(4*0);的話會異常.0不能作為除數
int maxnum=getmaxnum(y);
rectangle rct;
random rnd = new random();
int red,green,blue;
for(int i=20;i<680;i=i+96)
...{
dc.drawline(gridpen,20,i,880,i);
}
for(int i=0;i<colnum;i++)
...{
red=rnd.next(0,255);
green=rnd.next(0,255);
blue=rnd.next(0,255);
solidbrush brush=new solidbrush(color.fromargb(red,green,blue));
xpoint=20+((i+1)*colscale)-drawwidth;
yheight=y[i]*650/maxnum;
drawpoint=new point(xpoint,680-yheight);
rct=new rectangle(drawpoint,new size(drawwidth*2,yheight));
dc.fillrectangle(brush,rct);
dc.drawrectangle(gridpen,rct);
//繪制x數值
dc.drawstring(x[i],new font("宋體",9),new solidbrush(color.orangered),new pointf((float)(xpoint+drawwidth/2),680-yheight/2));
//繪制y數值
dc.drawstring(y[i].tostring(), new font("宋體", 9), new solidbrush(color.black), new pointf((float)(xpoint + drawwidth / 2), 680 - yheight-15));
}
dc.drawstring(reportname,new font("宋體",10),brushes.black,3,3);
return bmp;
}
private int getmaxnum(int[] arr)
...{
int max=arr[0];
for(int i=1;i<arr.length;i++)
...{
if(arr[i]>max)
...{
max=arr[i];
}
}
return max;
}
}
}
新聞熱點
疑難解答
圖片精選