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 に変換する必要があります。 このSOの質問に見られるように

  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 に答える