在创建彩虹拾色器时,我缺少什么才能使颜色饱和?

时间:2013-12-16 16:47:48

标签: colors color-profile

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

不幸的是,我无法弄清楚饱和算法。

enter image description here

这是我当前算法创建的。 无论何时我尝试在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--;
        }
    }

1 个答案:

答案 0 :(得分:0)

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

  1. 255,255,255为白色或100%饱和(混合所有颜色)
  2. 255,0,0为100%饱和红色,0%饱和度为绿色和蓝色。这与纯红色一样饱和。
  3. 50,0,0有点红,没有绿色和蓝色。这将是一个深红色,因为没有颜色=黑色。
  4. 通过保持红色与绿色与蓝色的相同比例,对于光谱中的每种颜色,您可以将%(接近255)提高以使饱和度更高,并降低%(接近0)以使相同颜色饱和度较低(较暗)。

    希望有所帮助。