【问题标题】:C# opposite color [duplicate]C#相反颜色[重复]
【发布时间】:2010-07-30 20:07:32
【问题描述】:

可能重复:
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;
    }

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

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

【问题讨论】:

  • 反色? #888888 的反义词是什么? FFFFFF 和 00000 距离它一样远……我真的不知道相反的颜色是什么……
  • 无论背景是什么颜色,您都想确保您可以阅读标签,对吧?

标签: c# fading


【解决方案1】:
  1. 您需要将颜色转换为 HSV。 As seen in this SO question

  2. 得到相反的180度色相值:

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

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

【讨论】:

    【解决方案2】:

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

    This 是一个很好的向导。

    【讨论】:

    • 现在我真的很好奇 #888888 是否会转 180 度并自行着陆..
    • 因为这里的var_Maxvar_Min 是相同的(88),所以它最终的HSL 为(0,0,88/255)。现在,你将 H 移动 180 度,到 0.5,但这一步实际上是没有意义的,因为饱和度为 0,转换回 RGB 的公式只是R = L * 255, G = L * 255, B = L * 255,所以你回到@987654330 @。所以,是的,它确实自己。 ... 哦。我刚收到那个笑话。那只是个玩笑?该死的,我浪费了几分钟输入这个评论! >=F
    【解决方案3】:

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

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

    【讨论】:

    • 检查色轮,您会发现此方法并非始终有效。它仅适用于某些值。这是因为 RGB 不是正确的循环表示。 HSL 是。
    猜你喜欢
    • 2011-06-08
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 2016-06-28
    • 1970-01-01
    • 2015-06-02
    相关资源
    最近更新 更多