C#颜色相反

时间:2010-07-30 20:07:33

标签: c# fading

  

可能重复:
  How do I invert a colour?

是否有可能找到给定rgb组合的相反颜色?例如,我在基本应用程序中有以下内容。

    myColor red = new myColor(0, true), green = new myColor(0, true), blue = new myColor(0, true), theColor;
    Random rand = new Random(DateTime.Now.Millisecond);
    int color = 0;
    void timer_Tick(object sender, EventArgs e)
    {
        switch (color)
        {
            case 0: theColor = red; break;
            case 1: theColor = green; break;
            case 2: theColor = blue; break;
        }

        if (theColor.Up)
        {
            theColor.Value += 0.01F;
            if (theColor.Value + 0.01F > 1) { theColor.Up = false; color = rand.Next(3); }
        }
        else if (!theColor.Up)
        {
            theColor.Value -= 0.01F;
            if (theColor.Value - 0.01F < 0) { theColor.Up = true; color = rand.Next(3); }
        }
        label1.Text = red.Value + Environment.NewLine + green.Value + Environment.NewLine + blue.Value;
        FadeBackground(red.Value, green.Value, blue.Value);
    }
    void FadeBackground(float red, float green, float blue)
    {
        BackColor = Color.FromArgb((int)((1 - red) * 255), (int)((1 - green) * 255), (int)((1 - blue) * 255));
        label1.ForeColor = BackColor;
        //label1.BackColor;
    }
    class myColor
    {
        public myColor(float value, bool up)
        {
            Value = value;
            Up = up;
        }
        public float Value;
        public bool Up;
    }

但我希望能够改变标签的背景颜色,使其始终与背景无关,或相反的颜色。

提前致谢,我希望这是有道理的。

4 个答案:

答案 0 :(得分:4)

查看此SO问题。接受的答案似乎是你的票。

How do I invert a colour / color?

答案 1 :(得分:3)

  1. 您需要将颜色转换为HSV。 As seen in this SO question

  2. 获得相反的180度色调值:

    hue =(hue + 0.5f)%1.0f

  3. 将您的颜色从HSV转换回RGB,这也在上面的帖子中得到了解答。

答案 2 :(得分:1)

您可以使用公式Hue, Saturation, Lighting将RGB值转换为here(HSL)值。然后,您只需将Hue移动180度,但保持饱和度和光线。最后,转换back

This是一个很好的指南。

答案 3 :(得分:0)

相反的颜色是White的RGB值减去Color的RGB值:

例如,如果颜色为100-100-100,则相反的是155-155-155。