# WinRT: darken or lighten a color

> In an app it can be interesting to have several shades of the same color. To do this, I've created a small helper for lightening or darkening a color. The…

- Author: Jérôme Giacomini
- Language: en
- Canonical URL: [WinRT: darken or lighten a color](https://jeromegiacomini.net/articles/winrt-darken-or-lighten-a-color)
- Last modified: 2026-09-05
- Topics: .NET, C#, Windows

In an app it can be interesting to have several shades of the same color.

To do this, I've created a small helper for lightening or darkening a color.

The principle of this helper is simple for each color (R/G/B), I reduce or amplify the color by a percentage.

```csharp
    /// 
    /// Helper permettant de manipuler des couleurs
    /// 
    public static class ColorHelper
    {
        /// 
        /// Assombrit une couleur
        /// 
        /// couleur à assombrir
        /// pourcentage
        /// 
        /// si le pourcentage n'est pas entre 0 et 100
        public static Color Darkerise(this Color color, byte percentage = 80)
        {
            CheckIsValidPercentage(percentage);
            var r = color.R;
            var g = color.G;
            var b = color.B;
            r = Darkerise(r, percentage);
            g = Darkerise(g, percentage);
            b = Darkerise(b, percentage);
            return Color.FromArgb(255, r, g, b);
        }

        static byte Darkerise(byte color, byte percentage)
        {
            double result = (double)color * (double)percentage / 100d;

            if (result < 0)
                result = 0;
            if (result > 255)
                result = 255;

            return (byte)result;
        }
        /// 
        /// Eclaircit une couleur
        /// 
        /// couleur à éclaircir
        /// pourcentage
        /// 
        /// si le pourcentage n'est pas entre 0 et 100
        public static Color Lighterise(this Color color, byte percentage = 80)
        {
            CheckIsValidPercentage(percentage);
            var r = color.R;
            var g = color.G;
            var b = color.B;
            r = Lighterise(r, percentage);
            g = Lighterise(g, percentage);
            b = Lighterise(b, percentage);
            return Color.FromArgb(255, r, g, b);
        }

        static byte Lighterise(byte color, byte percentage)
        {
            double result = ((double)color * (double)percentage / 100d) + (255d - (double)percentage / 100d * 255d);

            if (result < 0)
                result = 0;
            if (result > 255)
                result = 255;

            return (byte)result;
        }

        static void CheckIsValidPercentage(byte percentage)
        {
            if (percentage < 0 || percentage > 100)
                throw new ArgumentException("percentage");
        }
    }

```


Example of use:

```csharp
var color = Color.FromArgb(255, 80, 158, 47);
rect1.Fill = new SolidColorBrush(color.Darkerise());
rect2.Fill = new SolidColorBrush(color.Lighterise());

```

[I'm going to try it.](https://infiniteblogs.blob.core.windows.net/medias/6029/sample_thumb_60D53EC5.png)](https://infiniteblogs.blob.core.windows.net/medias/6029/sample_210B5840.png)

Happy coding ![You smile](https://infiniteblogs.blob.core.windows.net/medias/6029/wlEmoticon-smile_1E4D91FF.png)
