【问题标题】:What am I missing to saturate the colors in creating my rainbow Color Picker?在创建我的彩虹颜色选择器时,我缺少什么来使颜色饱和?
【发布时间】:2013-12-16 16:47:48
【问题描述】:

我正在尝试创建一个类似于 MS Paint 的拾色器。

很遗憾,我无法弄清楚饱和度的算法。

这是我当前的算法创建的。 每当我尝试在 Y 轴上执行饱和效果时,它只会使第一行之后的所有内容完全变为红色或黑色。

    public ColorWheel()
    {
        for (int y = 0; y < 255; y++)
        {
            for (int x = 0; x < 255 * 6; x++)
            {
                //Red 255 - Green 0-254
                if (color.R == brightness && color.G < brightness && color.B == 0)
                {
                    color.G += 1;

                    //color.R -= (byte)y;
                    //color.G += (byte)y;
                    //color.B += (byte)y;
                }
                //Green 255 - Red 255-0
                else if (color.R > 0 && color.G == brightness && color.B == 0)
                {
                    color.R -= 1;

                    //color.R -= (byte)y;
                    //color.G -= (byte)y;
                    //color.B += (byte)y;
                }
                //Green 255 - Blue 0-255
                else if (color.R == 0 && color.G == brightness && color.B < brightness)
                {
                    color.B += 1;

                    //color.R += (byte)y;
                    //color.G -= (byte)y;
                    //color.B += (byte)y;
                }
                //Blue 255 - Green 255-0
                else if (color.R == 0 && color.G > 0 && color.B == brightness)
                {
                    color.G -= 1;

                    //color.R += (byte)y;
                    //color.G -= (byte)y;
                    //color.B -= (byte)y;
                }
                //Blue 255 - Red 0-255
                else if (color.R < brightness && color.G == 0 && color.B == brightness)
                {
                    color.R += 1;

                    //color.R += (byte)y;
                    //color.G += (byte)y;
                    //color.B -= (byte)y;
                }
                //Red 255 - Blue 255-0
                else if (color.R == brightness && color.G == 0 && color.B > 0)
                {
                    color.B -= 1;

                    //color.R -= (byte)y;
                    //color.G += (byte)y;
                    //color.B -= (byte)y;
                }

                image.SetPixel((uint)x, (uint)y, color);
            }

                //brightness--;
        }
    }

【问题讨论】:

    标签: colors color-profile


    【解决方案1】:

    当您使用 RGB 时,255 在每种颜色上都是 100% 饱和的,所以:

    1. 255、255、255 为白色或 100% 饱和度(混合所有颜色)
    2. 255, 0, 0 是 100% 饱和的红色,0% 的绿色和蓝色饱和度。这是纯红色所能达到的饱和度。
    3. 50, 0, 0 有点红色,没有绿色和蓝色。这将是深红色,因为没有颜色 = 黑色。

    通过保持相同的红绿蓝比例,对于光谱中的每种颜色,您只需提高 %(接近 255)以使饱和度更高,并降低 %(接近 0)以使相同的颜色饱和度较低(较暗)。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多