visifire  柱状图控件

visifire  柱状图控件最近使用到一个柱状图控件visifire用起来还是比较高级的不过会有水印商业用途需要购买正版效果还是很好的还有动画效果能够识别最大高度创建之前需要引用http://note.youdao.com/noteshare?id=4a8d01bd0bfef2cdc86c5752aad3156…

大家好,又见面了,我是你们的朋友全栈君。

 

 

 

 

 

 

 

最近使用到一个柱状图控件  visifire  

 

用起来还是比较高级的   不过会有水印  商业用途需要购买正版

 

visifire  柱状图控件

 

效果还是很好的  还有动画效果  

能够识别最大高度

 

创建之前需要引用

http://note.youdao.com/noteshare?id=4a8d01bd0bfef2cdc86c5752aad31569 

visifire  柱状图控件
visifire  柱状图控件

 /// <summary>
        /// 创建一个柱状图
        /// </summary>
        /// <param name="name">柱状图的标题名</param>
        /// <param name="valuex">x轴内容</param>
        /// <param name="valuey">y轴内容</param>
        public void creat(string name, List<string> valuex, List<string> valuey)
        {
            MyCharts chart = new MyCharts();
            //设置图标的宽度和高度
            chart.Width = 480;
            chart.Height = 270;
           // chart.Margin = new Thickness(100, 5, 10, 5);
            //是否启用打印和保持图片
            chart.ToolBarEnabled = false;

            chart.Bevel = false;
            

            //设置图标的属性
            chart.ScrollingEnabled = true;//是否启用或禁用滚动
            //chart.View3D = true;//3D效果显示

            //创建一个标题的对象
            Title title = new Title();
            
            //设置标题的名称
            title.Text = name;
            title.Padding = new Thickness(0, 10, 5, 0);

            //向图标添加标题
            chart.Titles.Add(title);

            Axis yAxis = new Axis();
            //yAxis.AxisMaximum = strListy.Max(r=>r);
            //设置图标中Y轴的最小值永远为0           
            yAxis.AxisMinimum = 0;
            //设置图表中Y轴的后缀          
            //yAxis.Suffix = "斤";
            chart.AxesY.Add(yAxis);

            // 创建一个新的数据线。               
            DataSeries dataSeries = new DataSeries();

            // 设置数据线的格式
            dataSeries.RenderAs = RenderAs.StackedColumn;//柱状Stacked


            // 设置数据点              
            DataPoint dataPoint;
            for (int i = 0; i < valuex.Count&&i<valuey.Count; i++)
            {
                // 创建一个数据点的实例。                   
                dataPoint = new DataPoint();
                // 设置X轴点                    
                dataPoint.AxisXLabel = valuex[i];
                //设置Y轴点                   
                dataPoint.YValue = double.Parse(valuey[i]);
                //添加一个点击事件        
                //dataPoint.MouseLeftButtonDown += new MouseButtonEventHandler(dataPoint_MouseLeftButtonDown);
                //添加数据点                   
                dataSeries.DataPoints.Add(dataPoint);
            }

            // 添加数据线到数据序列。                
            chart.Series.Add(dataSeries);

            //将生产的图表增加到Grid,然后通过Grid添加到上层Grid.           
            //Grid gr = new Grid();
            //gr.Children.Add(chart);
            Simon.Children.Add(chart);
        }
    }

创建柱状图

 

 

还有一个图片类型的柱状图控件  长的不怎么好看

 

visifire  柱状图控件

 

 

看着是挺简洁 

就是绑定数据 一张简单的图片

添加图片前  添加一个类

visifire  柱状图控件
visifire  柱状图控件

public class DarwGrapClass
    {


        //绘制柱状统计图型的方法

        /// <param name="width">图像的宽度:int类型</param>
        /// <param name="height">图像的高度:int类型</param>
        /// <param name="topic">图像标题的内容:string类型</param>
        /// <param name="beginy">y轴距图像左边界的宽度:int类型</param>
        /// <param name="partx">x轴将被等分多少份:int类型</param>
        /// <param name="beginx">x轴距图像顶部的高度:int类型</param>
        /// <param name="party">y轴将被等分多少份:int类型</param>
        /// <param name="xmess">X轴信息内容:string[]</param>
        /// <param name="ymess">y轴信息内容:string[]</param>
        /// <param name="county">某次Y轴的具体数组值:int[]</param>
        /// <param name="ymax">y轴的最大值</param>
        /// <param name="xmax">x轴的最大值</param>
        /// <returns>Bitmap类型的线性图像</returns>



        public Bitmap CreateZhuImage(int width, int height, string topic, int beginy, int partx, int beginx, int party, string[] xmess, string[] ymess, int[] county, int ymax, int xmax)
        {
            Bitmap image = new Bitmap(width, height);
            //创建Graphics类对象
            Graphics g = Graphics.FromImage(image);
            try
            {
                //清空图片背景色
                g.Clear(Color.White);
                Font font = new Font("Arial", 10, FontStyle.Regular);
                Font font1 = new Font("微软雅黑", 15, FontStyle.Bold);
                LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.BlueViolet, 1.2f, true);
                //图片的底色
                g.FillRectangle(Brushes.WhiteSmoke, 0, 0, width, height);
                //在图片上面写标题文字
                g.DrawString(topic, font1, brush, new PointF(width / 4, height - 20));
                //画图片的边框线
                g.DrawRectangle(new Pen(Color.Blue), 0, 0, image.Width - 1, image.Height - 1);

                //================绘制线条================
                //----------------------------绘制坐标轴----------------------------
                Pen mypen = new Pen(brush, 1);
                Pen mypen1 = new Pen(Color.Blue, 2);
                //计算剩余的X轴长度(xlength),并根据X轴等分原则计算每分的长度(xpart)
                int xlength = image.Width - beginy;
                int xpart = Convert.ToInt32(xlength / partx);
                //计算剩余的Y轴长度(ylength),并根据Y轴等分原则计算每分的长度(ypart)
                int ylength = image.Height - beginx - 40;
                int ypart = Convert.ToInt32(ylength / party);

                //----------------------------绘制纵向线条开始----------------------------
                int x = beginy;
                for (int i = 0; i <= partx; i++)
                {
                    g.DrawLine(mypen, x, beginx, x, beginx + ylength - 10);
                    x = x + xpart;
                }

                //绘制带箭头的直线
                //mypen1.StartCap = LineCap.ArrowAnchor;
                g.DrawLine(mypen1, beginy, beginx, beginy, beginx + ylength - 10);//所以真实的Y轴长度是(ylength)
                                                                                  //----------------------------绘制纵向线条结束----------------------------

                //----------------------------绘制横向线条开始----------------------------
                int y = beginx - 5;
                for (int i = 0; i <= party; i++)
                {
                    g.DrawLine(mypen, beginy, y, beginy + xlength, y);
                    y = y + ypart;
                }
                g.DrawLine(mypen1, beginy, beginx + ylength - 10, beginy + xlength, beginx + ylength - 10);
                //----------------------------绘制横向线条结束----------------------------

                //================绘制X,Y轴的坐标内容================
                //x轴信息
                int x1 = beginy;
                for (int i = 0; i < partx; i++)
                {
                    g.DrawString(xmess[i].ToString(), font, Brushes.Blue, x1, beginx + ylength); //设置文字内容及输出位置
                    x1 = x1 + xpart;
                }
                //y轴
                int y1 = beginx + ypart;
                for (int i = 0; i < party; i++)
                {
                    g.DrawString(ymess[i].ToString(), font, Brushes.Blue, 1, y1); //设置文字内容及输出位置
                    y1 = y1 + ypart;
                }
                //================根据传过来的数组中的值(数目与X轴个数相等,但是Y值被放置在数组中)================
                //绘制柱状图.
                x = 80;
                Font font2 = new System.Drawing.Font("Arial", 10, FontStyle.Bold);
                SolidBrush mybrush = new SolidBrush(Color.Red);
                //SolidBrush mybrush2 = new SolidBrush(Color.Green);

                for (int i = 0; i < county.Length; i++)
                {
                    //第i期
                    int part1 = Convert.ToInt32(((decimal)Convert.ToInt32(county[i]) / ymax) * ylength);
                    g.FillRectangle(mybrush, beginy, ylength - part1, xpart / 2, part1);
                    //此处请注意:求小数时候,分母必须为decimal类型,否则结果一律为0;
                    g.DrawString(county[i].ToString(), font2, Brushes.GreenYellow, beginy, ylength - part1);
                    beginy += xpart;
                    //此处注意:最后使得补偿增加为X轴的宽度
                }

                return image;
            }
            catch
            {
                return image;
            }
        }




    }

view

 

 

 DarwGrapClass drawpic = new DarwGrapClass();

            string topic = "";

            String[] xmess = { "第一季度", "第二季度", "第三季度", "第四季度", "新年到现在" };
            String[] ymess = {  "6000", "5000", "4000", "3000", "2000", "1000", " 0" };
            int[] county = { 5000, 6000, 5000, 5000, 3500 };
            //Bitmap pic1 = drawpic.CreateZhuImage(500, 500, topic, 50, 5, 15, 7, xmess, ymess, county, 7000, 200);
            Bitmap pic1 = drawpic.CreateZhuImage(500, 500, "", 50, 5, 5, 7, xmess, ymess, county, 7000, 200);
            pic.Source = ChangeBitmapToImageSource(pic1);

 

 

还有  发现一个将图片bitmap转换成imagesource

        [DllImport("gdi32.dll", SetLastError = true)]
        private static extern bool DeleteObject(IntPtr hObject);
        public static ImageSource ChangeBitmapToImageSource(Bitmap bitmap)
        {

            //Bitmap bitmap = icon.ToBitmap();

            IntPtr hBitmap = bitmap.GetHbitmap();


            ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(

                hBitmap,

                IntPtr.Zero,

                Int32Rect.Empty,

                BitmapSizeOptions.FromEmptyOptions());


            if (!DeleteObject(hBitmap))

            {

                throw new System.ComponentModel.Win32Exception();

            }


            return wpfBitmap;

      }

 

 

!!大部分内容来自网路

 

转载于:https://www.cnblogs.com/v587yy/p/7656021.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162790.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Oracle提权[通俗易懂]

    Oracle提权[通俗易懂]三种方式1.普通用户模式:拥有一个普通的oracle连接账号,不需要DBA权限,可提权至DBA,并以oracle实例运行的权限执行操作系统命令2.DBA用户模式:(自动化工具)sqlmap–is-dba测试是否是dba权限拥有DBA账号密码,可以省去自己手动创建存储过程的繁琐步骤,一键执行测试3.注入提升模式:(sqlmap)拥有一个oracle注入点,可以通过注入点执行系统命令,此种模式没有实现回显,需要自己验证。三种方式的提权工具…

  • python判断是否为空_python 判断对象是否为空

    python判断是否为空_python 判断对象是否为空在实际的工作当中,我们难免要与空值打交道,相信不少初学者都会写出下面的代码:ifaisNone:dosomething.else:dotheotherthing.python学习网,大量的免费python视频教程,欢迎在线学习!这样写看起来不错,但实际上会有问题。一般来讲,Python中会把下面几种情况当做空值来处理:NoneFalse0,0.0,0L”,(),[],{}其中Non…

  • ZOJ问题(坑死了)「建议收藏」

    ZOJ问题(坑死了)「建议收藏」ZOJ问题TimeLimit:2000/1000MS(Java/Others)MemoryLimit:32768/32768K(Java/Others)TotalSubmission

  • js中的闭包[通俗易懂]

    js中的闭包[通俗易懂]闭包是js的一个难点也是它的一个特色,是我们必须掌握的js高级特性,那么什么是闭包呢?它又有什么用呢?我们都知道,js的作用域分两种,全局和局部,基于我们所熟悉的作用域链相关知识,我们知道在js作用域环境中访问变量的权利是由内向外的,内部作用域可以获得当前作用域下的变量并且可以获得当前包含当前作用域的外层作用域下的变量,反之则不能,也就是说在外层作用域下无法获取内层作用域下的变量,同样在不同的函…

  • 如何搭建www服务器_网站服务器

    如何搭建www服务器_网站服务器更多内容参见个人技术博客,无广告欢迎关注搭建自己的服务器,过程大致分为3步:*购买服务器,配置系统环境*获得域名* CA认证1、购买服务器,配置系统环境经过比较,阿里云、腾讯

  • Linux的查找命令

    Linux的查找命令

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号