2

可能重复:
如何反转颜色?

是否可以找到给定 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

3 回答 3

4
  1. 您需要将颜色转换为 HSV。 如this SO question所示

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

    色调 = (色调 + 0.5f) % 1.0f

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

于 2010-07-30T20:14:10.460 回答
1

您可以使用此处的公式将 RGB 值转换为色相、饱和度、照明(HSL) 值。然后,您只需将周围移动 180 度,但不理会饱和度和照明。最后,转换回来Hue

是一个很好的指南。

于 2010-07-30T20:11:40.260 回答
0

相反的颜色是白色的 RGB 值减去颜色的 RGB 值:

例如,如果颜色是 100-100-100,那么相反的颜色是 155-155-155。

于 2010-07-30T20:11:55.517 回答