C# 实现颜色的梯度渐变案例

为了表示不同的浓度值,对颜色条应用颜色梯度变化,基本方法是对ARGB分量乘以一个渐变系数。

下面是对十种颜色应用的三个梯度值的过程。

 public void DrawRect(gasConcentration[] data)
    {
      Graphics graphic = pictureBox1.CreateGraphics();
      Graphics graphic2 = pictureBox2.CreateGraphics();
      int iCall2 = pictureBox2.Width/10;

      data = new gasConcentration[40];
      int iLen = pictureBox1.Width = 540;
      int iHigh = pictureBox1.Height;
      //初始化十种颜色
      Color[] color = new Color[10] { Color.FromArgb(240, 0, 0), Color.Green, Color.Yellow, Color.Blue, Color.SteelBlue, Color.SeaGreen,
                    Color.Chartreuse, Color.SaddleBrown, Color.Violet, Color.BurlyWood};

      //十个颜色,每个颜色三个深度
      for (int i = 0; i < 40; i++)
      {
        data[i].gasType = i/4 + 1;
        data[i].gasConc = i%4;
      }
      Color c3, c4;
      if (data.Length > 0)
      {
        int iCall = iLen / data.Length;
        pictureBox2.Width = iCall * data.Length;
        pictureBox1.Width = iCall * data.Length;
        iCall2 = iCall * 4;
        //画对比框条
        for (int i = 0; i < 10; i++)
        {
          Brush brush1 = new LinearGradientBrush(new Point(0, iHigh), new Point(iCall2, iHigh), color[i], color[i]);
          graphic2.FillRectangle(brush1, 0 + iCall2 * i, 0, iCall2, iHigh);
          brush1.Dispose();
        }
        //画颜色条梯度分量
        for (int i = 0; i < data.Length; i++)
        {
          //将颜色分为三个深度
          if (data[i].gasConc != 0)
            c3 = c4 = Color.FromArgb((byte)(255 * (float)(1 - (data[i].gasConc * 0.01))),
            (byte)(color[data[i].gasType-1].R * (float)(1 - (data[i].gasConc * 0.2))),
            (byte)(color[data[i].gasType-1].G * (float)(1 - (data[i].gasConc * 0.2))),
            (byte)(color[data[i].gasType-1].B * (float)(1 - (data[i].gasConc * 0.2))));
          else
            c3 = c4 = Color.Black;
          Brush brush1 = new LinearGradientBrush(new Point(0, iHigh), new Point(iCall, iHigh), c3, c4);
          graphic.FillRectangle(brush1, 0 + iCall * i , 0, iCall, iHigh);
          brush1.Dispose();
        }
      }
      else
      {
        c4 = color[0];
        Brush brush1 = new LinearGradientBrush(new Point(0, iHigh), new Point(iLen, iHigh), c4, c4);
        graphic.FillRectangle(brush1, 0, 0, iLen, iHigh);
        brush1.Dispose();
      }

    }
 public struct gasConcentration
    {
      int iGasType;//气体名称
      int iGasConc;//气体浓度 // 0=no, 1=low, 2=med, 3=high

      public int gasType { get { return iGasType; }
        set { iGasType = value; }    }
      public int gasConc { get { return iGasConc; }
        set { iGasConc = value; }
      }
    }

补充:C# 简单的颜色渐变算法

今天要用到一个颜色渐变的算法,网上看了很多,觉得都太繁琐,索性自己写一个。话不多说,直接上代码!

**这是用来获取某一颜色段的分度集合**
 /// <summary>
    /// 获得某一颜色区间的颜色集合
    /// </summary>
    /// <param name="sourceColor">起始颜色</param>
    /// <param name="destColor">终止颜色</param>
    /// <param name="count">分度数</param>
    /// <returns>返回颜色集合</returns>
    public static List<Color> GetSingleColorList(Color srcColor, Color desColor, int count)
    {
      List<Color> colorFactorList = new List<Color>();
      int redSpan = desColor.R - srcColor.R;
      int greenSpan = desColor.G - srcColor.G;
      int blueSpan = desColor.B - srcColor.B;
      for (int i = 0; i < count; i++)
      {
        Color color = Color.FromArgb(
          srcColor.R + (int)((double)i / count * redSpan),
          srcColor.G + (int)((double)i / count * greenSpan),
          srcColor.B + (int)((double)i / count * blueSpan)
        );
        colorFactorList.Add(color);
      }
      return colorFactorList;
    }
**这里就是将红到紫之间的颜色分为5个区间,利用上面的算法拼接5个区间的分度值,就得到全彩颜色集合**
/// <summary>
    /// 获取从红到紫的颜色段的颜色集合
    /// </summary>
    /// <param name="totalCount">分度数</param>
    /// <param name="redToPurple">是否从红到紫色渐变</param>
    /// <returns>返回颜色集合</returns>
    public static List<Color> GetFullColorList(int totalCount, bool redToPurple = true)
    {
      List<Color> colorList = new List<Color>();
      if (totalCount > 0)
      {
        if (redToPurple)
        {
          colorList.AddRange(GetSingleColorList(Color.Red, Color.Yellow, totalCount / 5 + (totalCount % 5 > 0 ? 1 : 0)));
          colorList.AddRange(GetSingleColorList(Color.Yellow, Color.Lime, totalCount / 5 + (totalCount % 5 > 1 ? 1 : 0)));
          colorList.AddRange(GetSingleColorList(Color.Lime, Color.Cyan, totalCount / 5 + (totalCount % 5 > 2 ? 1 : 0)));
          colorList.AddRange(GetSingleColorList(Color.Cyan, Color.Blue, totalCount / 5 + (totalCount % 5 > 3 ? 1 : 0)));
          colorList.AddRange(GetSingleColorList(Color.Blue, Color.Magenta, totalCount / 5 + (totalCount % 5 > 4 ? 1 : 0)));
        }
        else
        {
          colorList.AddRange(GetSingleColorList(Color.Magenta, Color.Blue, totalCount / 5 + (totalCount % 5 > 0 ? 1 : 0)));
          colorList.AddRange(GetSingleColorList(Color.Blue, Color.Cyan, totalCount / 5 + (totalCount % 5 > 1 ? 1 : 0)));
          colorList.AddRange(GetSingleColorList(Color.Cyan, Color.Lime, totalCount / 5 + (totalCount % 5 > 2 ? 1 : 0)));
          colorList.AddRange(GetSingleColorList(Color.Lime, Color.Yellow, totalCount / 5 + (totalCount % 5 > 3 ? 1 : 0)));
          colorList.AddRange(GetSingleColorList(Color.Yellow, Color.Red, totalCount / 5 + (totalCount % 5 > 4 ? 1 : 0)));
        }
      }
      return colorList;
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • C# Color.FromArgb()及系统颜色对照表一览

    C#关于颜色值的表示: 常用的颜色值表示方式有两种,一种是10进制的RGB值表示,如(0,113,255),三个值分别表示(红,绿,蓝):一种是16进制的颜色码表示,如#ff3212.这两种形式在编程中都可以用到.若是在VS设计器中,设置某个控件的前景色或背景色时,可直接用0,113,255或#ff3212的形式,而在后台代码中,也可以通过Color.FromArgb()方法使用这两种形式来定义颜色. Color.FromArgb()方法的重载及使用 Color.FromArgb()方法共有四种

  • C# 如何设置label(标签)控件的背景颜色为透明

    有时候,我们需要将控件的背景颜色设定为透明,比如说label(标签)控件.那么,如何将控件的背景颜色设定为透明?是不是只要将控件的BackColor属性设为Transparent(透明)就可以了呢?答案是否定的.看似很简单,其实不然,在实际操作过程中,很让人抓狂,抓狂到让你怀疑人生. 关于透明 首先要解释一下,什么叫做透明.在C#这里,透明就是指透过控件的背景,可以看到其父控件(容器)表面的颜色.所谓的透明,其实就是将父控件表面的颜色设定为自己的背景颜色. 设置控件背景颜色为透明的步骤和注意事项

  • C#利用Label标签控件模拟窗体标题的移动及窗体颜色不断变换效果

    前言 标签(Label)控件是最常用的控件,在任何Windows应用程序中都可以中都可以看到标签控件.标签控件用于显示用户不能编辑的文件或图像,常用于对窗体上各种控件进行标注或说明. 在窗体中添加标签控件时,会创建一个Label类的实例.Label控件派生自Control控件,和其他控件一样支持事件,但通常不需要添加任何事件代码. 本文主要给大家介绍了关于C#用Label标签控件模拟窗体标题移动及窗体颜色不断变换的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 开发工

  • C# 根据表格偶数、奇数加载不同颜色

    效果图: //偶数随机 Random evenRanm = new Random(); //奇数随机 Random oddRanm = new Random(); string[] listColor = new string[] { "#2BB669","#FF5750","#39AFEA","#9A0089", "#00CC6A","#717FF9","#4A5459&qu

  • C#使用RichTextBox实现替换文字及改变字体颜色功能示例

    本文实例讲述了C#使用RichTextBox实现替换文字及改变字体颜色功能.分享给大家供大家参考,具体如下: 替换文字 private void GenerateEntity() { try { string result = ChangeWords("specific content..."); txtContent.Text = result; ChangeColor(); } catch (Exception ex) { MessageBox.Show("类生成失败!错

  • C# 实现颜色的梯度渐变案例

    为了表示不同的浓度值,对颜色条应用颜色梯度变化,基本方法是对ARGB分量乘以一个渐变系数. 下面是对十种颜色应用的三个梯度值的过程. public void DrawRect(gasConcentration[] data) { Graphics graphic = pictureBox1.CreateGraphics(); Graphics graphic2 = pictureBox2.CreateGraphics(); int iCall2 = pictureBox2.Width/10; d

  • Android自定义view之仿支付宝芝麻信用仪表盘示例

    自定义view练习 仿支付宝芝麻信用的仪表盘 对比图: 首先是自定义一些属性,可自己再添加,挺基础的,上代码 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="RoundIndicatorView"> <!--最大数值--> <attr name="maxNum" form

  • Javacript实现颜色梯度变化和渐变的效果代码

    对于本站的导航栏,想做点什么.所以,选择了用js对导航栏的颜色做了梯度的变化处理. 起初,觉得用opacity属性(透明度)来改变颜色的梯度变化.不过,这样会出现一个问题. 每一个导航标签用的是[li],当鼠标浮动到标签上时,通过onmouseover()立即改变[li]的className,并用setInterval()来使其opacity(透明度)由0变到1.不过,当鼠标离开时,对于[li]标签的颜色恢复的处理貌似麻烦了许多.所以,很快就放弃了这个做法,换种思路. 到百度上一搜,看到了一篇很

  • JS实现颜色梯度与渐变效果完整实例

    本文实例讲述了JS实现颜色梯度与渐变效果的方法.分享给大家供大家参考,具体如下: 运行效果图如下: 完整实例代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xht

  • Python实现PS图像调整颜色梯度效果示例

    本文实例讲述了Python实现PS图像调整颜色梯度效果.分享给大家供大家参考,具体如下: 这里用 Python 实现 PS 中的色彩图,可以看到颜色的各种渐变,具体的效果可以参考附录说明 和之前的程序相比,这里利用矩阵的运算替代了 for 循环,提升了运行的效率. import numpy as np import matplotlib.pyplot as plt from skimage import io import numpy.matlib from skimage import img

  • Android颜色处理SweepGradient扫描及梯度渲染示例

    目录 扫描渲染 效果图: 代码: 扫描渲染 为什么什么叫扫描渲染呢?  相信大家都看过雷达扫描的效果,尤其是在安全软件中. public SweepGradient(float cx, float cy, int[] colors, float[] positions) Parameters: cx 渲染中心点x 坐标 cy 渲染中心y 点坐标 colors 围绕中心渲染的颜色数组,至少要有两种颜色值 positions 相对位置的颜色数组,可为null,  若为null,可为null,颜色沿渐

  • 利用递增的数字返回循环渐变的颜色的js代码

    函数如下: 复制代码 代码如下: function gCL(i){ var f=parseInt((i%15)/5); i=i%15%5; switch(f){ case 0:return "#"+cS2(255-i*51)+cS2(i*51)+"00"; case 1:return "#00"+cS2(255-i*51)+cS2(i*51); case 2:return "#"+cS2(i*51)+"00"

  • Android编程实现自定义渐变颜色效果详解

    本文实例讲述了Android编程实现自定义渐变颜色效果.分享给大家供大家参考,具体如下: 你是否已经厌恶了纯色的背景呢?那好,Android提供给程序员自定义渐变颜色的接口,让我们的界面炫起来吧. xml定义渐变颜色 首先,你在drawable目录下写一个xml,代码如下 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.

  • jQuery与js实现颜色渐变的方法

    本文实例讲述了jQuery与js实现颜色渐变的方法.分享给大家供大家参考,具体如下: 1.目的 本来想的是 提示用户应该点某个按钮 这个功能,就想着让这个按钮div的边框变成醒目的颜色然后逐渐变白. 在网上搜了搜,本来想使用jQuery的animate,后来发现这个方法只能用来进行长度的渐变.还有就是需要下载jQuery的颜色渐变插件来实现,感觉挺麻烦的,就自己用土办法实现了. 2.原理 先获得初始颜色的rgb,再获得终止颜色的rgb,使用rgb三个数字的差值,从初始颜色的rgb逐渐过渡到终止颜

  • 《CSS3实战》笔记--渐变设计(一)

    基于CSS的渐变与图片渐变相比,最大的优点是便于修改,同时支持无级缩放,过渡更加自然.目前,实现CSS渐变的只有基于Webkit和Gecko引擎的浏览器,基于Presto引擎的Opera浏览器暂时不支持渐变,基于Trident的IE虽然可以通过滤镜的方式实现,但并不提倡. Webkit引擎(Safari 4及以上版本)的CSS渐变设计 基本语法: -webkit-gradient(<type>,<point>[,<radius>]?,<point>[,<

随机推荐