Esempio n. 1
0
        //Render是图形大标题,图开小标题,图形宽度,图形长度,饼图的数据集和饼图的数据集
        public Image Render(string title, string subTitle, int width, int height, DataSet chartData)
        {
            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;
            DataTable dt           = chartData.Tables[0];

            //计算最高的点
            float highPoint = 0;

            foreach (DataRow dr in dt.Rows)
            {
                if (highPoint < Convert.ToSingle(dr[1]))
                {
                    highPoint = Convert.ToSingle(dr[1]);
                }
            }
            //建立一个Graphics对象实例
            Bitmap bm = new Bitmap(width, height);

            try
            {
                Graphics g = Graphics.FromImage(bm);
                //设置条图图形和文字属性
                g.ScaleTransform((Convert.ToSingle(width)) / SIDE_LENGTH, (Convert.ToSingle(height)) / SIDE_LENGTH);
                g.SmoothingMode     = SmoothingMode.Default;
                g.TextRenderingHint = TextRenderingHint.AntiAlias;

                //设定画布和边
                g.Clear(Color.White);
                g.DrawRectangle(Pens.Black, 0, 0, SIDE_LENGTH - 1, SIDE_LENGTH - 1);
                //画大标题
                g.DrawString(title, new Font("Tahoma", 14), Brushes.Black, new PointF(5, 5));
                //画小标题
                g.DrawString(subTitle, new Font("Tahoma", 12), Brushes.Black, new PointF(7, 35));
                //画条形图
                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, barOrigin.Y, barWidth, barHeight);
                    barOrigin.X = barOrigin.X + (barWidth * 2);
                }
                //设置边
                g.DrawLine(new Pen(Color.Black, 2), new Point(CHART_LEFT, CHART_TOP), new Point(CHART_LEFT, CHART_TOP + CHART_HEIGHT));
                g.DrawLine(new Pen(Color.Black, 2), new Point(CHART_LEFT, CHART_TOP + CHART_HEIGHT), new Point(CHART_LEFT + CHART_WIDTH, CHART_TOP + CHART_HEIGHT));
                //画图例框和文字
                g.DrawRectangle(new Pen(Color.Black, 1), 200, 300, 199, 99);
                g.DrawString("图表说明", new Font("Tahoma", 12, FontStyle.Bold), Brushes.Black, new PointF(200, 300));

                //画图例
                PointF boxOrigin  = new PointF(210, 330);
                PointF textOrigin = new PointF(235, 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;
                }
                //输出图形
                g.Dispose();
                return(bm);
            }
            catch
            {
                return(bm);
            }
        }
Esempio n. 2
0
        //Render是图形大标题,图开小标题,图形宽度,图形长度,饼图的数据集和饼图的数据集要表示出来的数据
        public Image Render(string title, string subTitle, int width, int height, DataSet chartData, int DataLine)
        {
            const int SIDE_LENGTH  = 400;
            const int PIE_DIAMETER = 200;
            DataTable dt           = chartData.Tables[0];

            //通过输入参数,取得饼图中的总基数
            float sumData = 0;

            foreach (DataRow dr in dt.Rows)
            {
                sumData += Convert.ToSingle(dr[DataLine]);
            }
            //产生一个image对象,并由此产生一个Graphics对象
            Bitmap   bm = new Bitmap(width, height);
            Graphics g  = Graphics.FromImage(bm);

            //设置对象g的属性
            g.ScaleTransform((Convert.ToSingle(width)) / SIDE_LENGTH, (Convert.ToSingle(height)) / SIDE_LENGTH);
            g.SmoothingMode     = SmoothingMode.Default;
            g.TextRenderingHint = TextRenderingHint.AntiAlias;

            //画布和边的设定
            g.Clear(Color.White);
            g.DrawRectangle(Pens.Black, 0, 0, SIDE_LENGTH - 1, SIDE_LENGTH - 1);
            //画饼图标题
            g.DrawString(title, new Font("Tahoma", 14), Brushes.Black, new PointF(5, 5));
            //画饼图的图例
            g.DrawString(subTitle, new Font("Tahoma", 12), Brushes.Black, new PointF(7, 35));
            //画饼图
            float curAngle   = 0;
            float totalAngle = 0;

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                curAngle = Convert.ToSingle(dt.Rows[i][DataLine]) / sumData * 360;

                g.FillPie(new SolidBrush(ChartUtil.GetChartItemColor(i)), 100, 65, PIE_DIAMETER, PIE_DIAMETER, totalAngle, curAngle);
                g.DrawPie(Pens.Black, 100, 65, PIE_DIAMETER, PIE_DIAMETER, totalAngle, curAngle);
                totalAngle += curAngle;
            }
            //画图例框及其文字
            g.DrawRectangle(Pens.Black, 200, 300, 199, 99);
            g.DrawString("图表说明", new Font("Tahoma", 12, FontStyle.Bold), Brushes.Black, new PointF(200, 300));

            //画图例各项
            PointF boxOrigin  = new PointF(210, 330);
            PointF textOrigin = new PointF(235, 326);
            float  percent    = 0;

            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);
                percent = Convert.ToSingle(dt.Rows[i][DataLine]) / sumData * 100;
                g.DrawString(dt.Rows[i][1].ToString() + " - " + dt.Rows[i][0].ToString() + " (" + percent.ToString("0") + "%)", new Font("Tahoma", 10), Brushes.Black, textOrigin);
                boxOrigin.Y  += 15;
                textOrigin.Y += 15;
            }
            //回收资源
            g.Dispose();
            return((Image)bm);
        }