How do I determine darker or lighter color variant of a given color?

前端 未结 13 702
情话喂你
情话喂你 2020-12-04 07:37

Given a source color of any hue by the system or user, I\'d like a simple algorithm I can use to work out a lighter or darker variants of the selected color. Similar to effe

13条回答
  •  余生分开走
    2020-12-04 08:18

    In XNA there is the Color.Lerp static method that does this as the difference between two colours.

    Lerp is a mathematical operation between two floats that changes the value of the first by a ratio of the difference between them.

    Here's an extension method to do it to a float:

    public static float Lerp( this float start, float end, float amount)
    {
        float difference = end - start;
        float adjusted = difference * amount;
        return start + adjusted;
    }
    

    So then a simple lerp operation between two colours using RGB would be:

    public static Color Lerp(this Color colour, Color to, float amount)
    {
        // start colours as lerp-able floats
        float sr = colour.R, sg = colour.G, sb = colour.B;
    
        // end colours as lerp-able floats
        float er = to.R, eg = to.G, eb = to.B;
    
        // lerp the colours to get the difference
        byte r = (byte) sr.Lerp(er, amount),
             g = (byte) sg.Lerp(eg, amount),
             b = (byte) sb.Lerp(eb, amount);
    
        // return the new colour
        return Color.FromArgb(r, g, b);
    }
    

    An example of applying this would be something like:

    // make red 50% lighter:
    Color.Red.Lerp( Color.White, 0.5f );
    
    // make red 75% darker:
    Color.Red.Lerp( Color.Black, 0.75f );
    
    // make white 10% bluer:
    Color.White.Lerp( Color.Blue, 0.1f );
    

提交回复
热议问题