前段時間項目需要,寫了一個簡單的圖標統計類.決定以后寫點東西到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;
        
        }
    
    }
}
新聞熱點
疑難解答
圖片精選