WinRT : Assombrir/éclaircir une couleur

Dans une app il peut être intéressant d’avoir plusieurs teintes d’une même couleur.

Pour ce faire j’ai créé un petit helper permettant d’éclaircir ou d’assombrir une couleur.

 

Le principe de ce helper est simple pour chaque couleur (R/G/B), je réduis ou amplifie d’un pourcentage la couleur.

 

    /// 
    /// 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");
        }
    }

Exemple d’utilisation :

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

Happy coding Sourire

Photo de profil

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus