当前位置:编程学习 > C#/ASP.NET >>

帮帮我实现用C#画网状图,偶急用会付费的,谢!

请教各位高人,我有一个用C#做的小软件,现在希望更改这个软件的部分功能,主要是能够让它实现画网状图的功能,麻烦各位业余时间帮帮我,我qq:2193218,上午9点后一般在线,信箱:najiajia@163.com,我会付费的,谢谢了! --------------------编程问答-------------------- 这个是画折线图的,楼主参考下吧 --------------------编程问答--------------------
#region 生成折线图
        public static string DrawImage(float[] oFloat, bool isText,string path) {
            #region 数值
            int width = 660;        //图片宽度
            int height = 220;       //图片高度
            int iX = 20;            //左,下方向留白
            int iH = height - 20;   //显示区域高度
            int iW = width - 20;    //显示区域宽度

            float fHeight = 200;         //纵轴总长度
            float fVirtualHeight = fHeight;    //虚拟总长度
                                                //算出最大的正整数,如输入300,则最大数为400
            float fTempMaxNum = MaxFloat(oFloat);
            while (fVirtualHeight < fTempMaxNum) {
                fVirtualHeight += 100;
            }
            
            float fCount = 10;                       //纵轴分成10份,固定
            float fPx = fHeight / fCount;            //每份多少像素,固定
            float fRmb = fVirtualHeight / fCount;    //每份表示多少钱,根据参数中最大数决定
            float fPPx = fPx / fRmb;                 //每钱多少像素,
            #endregion

            #region 构造图用
            //构造BITMAP
            Bitmap oBmap = new Bitmap(width, height);

            //新建一个画板
            Graphics g = Graphics.FromImage(oBmap);
            
            //设置高质量插值法
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
            
            //设置高质量,低速度呈现平滑程度
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

            //清空画布并以透明背景色填充
            g.Clear(Color.White);

            //新建钢笔,灰色,1px
            Pen oPen = new Pen(Color.Gray);
            Pen oSpen = new Pen(Color.Silver);
            Pen oRpen = new Pen(Color.Red);

            //定义黑色过渡型笔刷
            LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, oBmap.Width, oBmap.Height), Color.Black, Color.Black, 1.2F, true);
            LinearGradientBrush brush_red = new LinearGradientBrush(new Rectangle(0, 0, oBmap.Width, oBmap.Height), Color.Red, Color.Red, 1.2F, true);

            #endregion

            //计算宽度,高度份数
            float wLens = iW / oFloat.Length;

            #region 画横纵坐标
            //线帽
            oPen.EndCap = LineCap.ArrowAnchor;
            //画横纵坐标
            g.DrawLine(oPen, iX, iH, iX, iX - 10);
            g.DrawString("y", new Font("Arial", 8), brush, 25, 1);
            g.DrawLine(oPen, iX, iH, iW + 10, iH);
            g.DrawString("x", new Font("Arial", 8), brush, iW + 10, iH - 1);
            //输出标题
            //g.DrawString(string.Format("CreateDate {0}", DateTime.Now.ToString()), new Font("Arial", 8), brush, iW / 2, 1);
            #endregion

            #region 画横坐标
            //画横坐标
            for (int i = 0; i < oFloat.Length; i++) {
                //输出小竖线
                if (i == DateTime.Now.Day) {
                    g.DrawString(string.Format("{0}", i), new Font("Arial", 7), brush_red, (float)wLens * i + iX - 4.5f, iH);
                } else {
                    g.DrawString(string.Format("{0}", i), new Font("Arial", 7), brush, (float)wLens * i + iX - 4.5f, iH);
                }
                g.DrawLine(oSpen, wLens * (i + 1) + iX, iH, wLens * (i + 1) + iX, iX);//画长线
            }
            #endregion

            #region 画纵坐标
            //画纵坐标
            for (int i = 0; i < fCount; i++) {
                if (i != 0) {
                    g.DrawString(string.Format("{0}", fVirtualHeight - fRmb * i), new Font("Arial", 7), brush, (float)iX - 20.5f, i * fPx - 5);
                }
                g.DrawLine(oSpen, iX, i * fPx + iX, iW, i * fPx + iX);//长线
            }
            #endregion

            #region 生成点列
            //生成点列
            PointF[] oPoint = new PointF[oFloat.Length];
            for (int i = 0; i < oFloat.Length; i++) {
                //记录坐标
                oPoint[i] = new PointF(i * wLens + iX, iH - oFloat[i] * fPPx);

                //输出标识
                if (isText && oFloat[i] > 0) {
                    g.DrawString(string.Format("{0}", oFloat[i]), new Font("Arial", 8), brush, oPoint[i]);
                }
            }
            #endregion
            g.DrawLines(oRpen, oPoint);
            //g.DrawCurve(oRpen, oPoint);

            //生成图片
            oBmap.Save(path, ImageFormat.Gif);

            oBmap.Dispose();
            g.Dispose();
            return string.Empty;
        }
        #endregion
--------------------编程问答-------------------- 贴个图出来吧,具体看看你要实现的效果,网状图听说的比较少,不知道你要实现什么功能。 --------------------编程问答-------------------- 谢谢你 --------------------编程问答--------------------
引用 3 楼 s000rd 的回复:
贴个图出来吧,具体看看你要实现的效果,网状图听说的比较少,不知道你要实现什么功能。



我想贴图来,但插入图片怎么老是让输入图片地址啊,是不是我等级底啊,郁闷,s000rd,能不能和你通过其它方式联系啊! --------------------编程问答--------------------
引用 5 楼 wygldc1007 的回复:
引用 3 楼 s000rd 的回复:
贴个图出来吧,具体看看你要实现的效果,网状图听说的比较少,不知道你要实现什么功能。



我想贴图来,但插入图片怎么老是让输入图片地址啊,是不是我等级底啊,郁闷,s000rd,能不能和你通过其它方式联系啊!


先把图片地址粘进去,选中该地址,点击上边的插入图片,粘入,OK
再不行参数下边的写法自己写(注意没有空格)

[ i m g = 图 片 地 址 ] 图 片 地 址 [ / i m g ] --------------------编程问答-------------------- 我又一个饼图和柱状图的代码,其实很简单,就是计算坐标,然后画线就行了,画线的代码kkun_3yue3里已经有了,关键是你的网状图要什么样的,根据需求确定坐标的计算方法. --------------------编程问答--------------------
引用 7 楼 devie 的回复:
我又一个饼图和柱状图的代码,其实很简单,就是计算坐标,然后画线就行了,画线的代码kkun_3yue3里已经有了,关键是你的网状图要什么样的,根据需求确定坐标的计算方法.


同意,基本上自己画线就可以了,无非是一些小学里用到的加法,乘法而已 --------------------编程问答-------------------- 作图的算法很多。你说的这么笼统,大家很难帮上你的。 --------------------编程问答-------------------- 需求不明确。 --------------------编程问答--------------------
引用 10 楼 llx529 的回复:
需求不明确。
--------------------编程问答-------------------- --------------------编程问答-------------------- LS的图很雷~ --------------------编程问答--------------------
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,