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());
Happy coding
Commentaires