• 颜色分段显示,线性填充的一个Demo


    1,指定一个开始颜色,一个结束颜色,进行填充。

    2,生成指定数量的,这两个颜色中间的过渡色,这个对地图表示等功能需要分段颜色表示的很有用。

    效果图:

    先看第一个功能,填充渐变的颜色:

    主要就是利用LinearGradientBrush这个画刷

                lblStartColor.Click += new EventHandler(lblColor_Click);
                lblEndColor.Click += new EventHandler(lblColor_Click);
            void lblColor_Click(object sender, EventArgs e)
            {
                var control = sender as Control;
                if (control != null)
                {
                    ColorDialog colrDlg = new ColorDialog();
                    colrDlg.Color = control.BackColor;
                    if (colrDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        control.BackColor = colrDlg.Color;
                        DoRefreshPicture();
                    }            
                }
            }
            private void DoRefreshPicture()
            {
                LinearGradientBrush brush = new LinearGradientBrush(this.pictureBox1.ClientRectangle, this.lblStartColor.BackColor,
                    this.lblEndColor.BackColor, LinearGradientMode.Horizontal);
                Bitmap bmp = new Bitmap(this.pictureBox1.ClientRectangle.Width, this.pictureBox1.ClientRectangle.Height);
                using (Graphics g = Graphics.FromImage(bmp))
                {
                    g.FillRectangle(brush, new Rectangle(0, 0, bmp.Width, bmp.Height));
                }
                brush.Dispose();
                this.pictureBox1.Image = bmp;
            }

    下面是颜色分段实现的主要代码。

    主要就是算两个颜色的差值,重新生成一个新的颜色,然后在一个Panel里动态生成一些Label。没什么技术含量。

    定义一个辅助分段颜色的类:

            private class ColorSplitor
            {
                private Color _startColor;
                private Color _endColor;
                private int _splitCount;
                public ColorSplitor(Color sColor, Color eColor, int splitCount)
                {
                    _startColor = sColor;
                    _endColor = eColor;
                    _splitCount = splitCount;
                }
                public Color  GetItemColor(int index)
                {
                    if (index <= 0) return _startColor;
                    if (index >= _splitCount) return _endColor;
    
                    int r = _startColor.R + (_endColor.R - _startColor.R) * index / _splitCount;
                    int g = _startColor.G + (_endColor.G - _startColor.G) * index / _splitCount;
                    int b = _startColor.B + (_endColor.B - _startColor.B) * index / _splitCount;
    
                    return Color.FromArgb(r, g, b);
                }
            }
            //分段显示
            private void button1_Click(object sender, EventArgs e)
            {
                if (string.IsNullOrEmpty(this.textBox1.Text)) return;
                int count = 0;
                if (int.TryParse(this.textBox1.Text, out count) && count > 0 && count < 15)
                {
                    this.panel1.Controls.Clear();
                    this.panel1.AutoSize = true;
    
                    ColorSplitor splitor = new ColorSplitor(this.lblStartColor.BackColor,
                        this.lblEndColor.BackColor, count);
                    int verticalPositon = 10;
                    for (var i = 0; i < count; i++)
                    {
                        Label lable = new Label();
                        lable.AutoSize = false;
                        lable.BorderStyle = BorderStyle.FixedSingle;
                        lable.Name = "lable" + i;
                        lable.Size = new Size(100, 20);
                        lable.BackColor = splitor.GetItemColor(i);
                        lable.Location = new Point(10, verticalPositon);
    
                        verticalPositon += 30;
                        this.panel1.Controls.Add(lable);
                    }
                } 
            }
  • 相关阅读:
    Visual Studio各版本区别
    调试ASP.NET网站IIS环境问题解决方法汇总
    关于Webpage Not Found问题解决~~~
    SpringCloud+vue搭建的商城项目
    springcloud实现限流
    ReentrantLock
    栈和堆的特点
    你用对锁了吗?浅谈 Java “锁” 事
    ReentrantReadWriteLock读写锁的使用
    OAuth2
  • 原文地址:https://www.cnblogs.com/xiashengwang/p/2620474.html
Copyright © 2020-2023  润新知