Convertir System.Drawing.Color en valeur RVB et Hex

En utilisant C #, j’ai essayé de développer les deux suivants. La façon dont je le fais peut avoir des problèmes et avoir besoin de vos bons conseils. De plus, je ne sais pas s’il existe une méthode existante pour faire la même chose.

private static Ssortingng HexConverter(System.Drawing.Color c) { Ssortingng rtn = Ssortingng.Empty; try { rtn = "#" + cRToSsortingng("X2") + cGToSsortingng("X2") + cBToSsortingng("X2"); } catch (Exception ex) { //doing nothing } return rtn; } private static Ssortingng RGBConverter(System.Drawing.Color c) { Ssortingng rtn = Ssortingng.Empty; try { rtn = "RGB(" + cRToSsortingng() + "," + cGToSsortingng() + "," + cBToSsortingng() + ")"; } catch (Exception ex) { //doing nothing } return rtn; } 

Merci.

    Je n’arrive pas à voir le problème ici. Le code me semble bon.

    La seule chose à laquelle je peux penser est que les blocs try / catch sont redondants – Color est une structure et R, G et B sont des octets, donc c ne peut pas être nul et cRToSsortingng() , cGToSsortingng() et cBToSsortingng() ne peut pas réellement échouer (la seule façon dont je peux les voir échouer est avec une NullReferenceException , et aucune ne peut être nulle).

    Vous pouvez nettoyer le tout en utilisant ce qui suit:

     private static Ssortingng HexConverter(System.Drawing.Color c) { return "#" + cRToSsortingng("X2") + cGToSsortingng("X2") + cBToSsortingng("X2"); } private static Ssortingng RGBConverter(System.Drawing.Color c) { return "RGB(" + cRToSsortingng() + "," + cGToSsortingng() + "," + cBToSsortingng() + ")"; } 

    Vous pouvez restr simple et utiliser le traducteur de couleurs natif:

     Color red = ColorTranslator.FromHtml("#FF0000"); ssortingng redHex = ColorTranslator.ToHtml(red); 

    Ensuite, divisez les trois paires de couleurs sous forme d’entier:

     int value = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber); 

    Si vous pouvez utiliser C # 6, vous pouvez bénéficier de chaînes interpolées et réécrire la solution de @Ari Roth comme ceci:

    C # 6:

     public static class ColorConverterExtensions { public static ssortingng ToHexSsortingng(this Color c) => $"#{cR:X2}{cG:X2}{cB:X2}"; public static ssortingng ToRgbSsortingng(this Color c) => $"RGB({cR}, {cG}, {cB})"; } 

    Aussi:

    • J’ajoute le mot this clé this pour les utiliser comme méthodes d’extension.
    • Vous pouvez utiliser la ssortingng mots-clés type au lieu du nom de la classe.
    • Vous pouvez utiliser la syntaxe lambda
    • Je les renommer pour être plus explicite à mon goût.

    par exemple

      ColorTranslator.ToHtml(Color.FromArgb(Color.Tomato.ToArgb())) 

    Cela peut éviter le truc KnownColor.

    J’ai trouvé une méthode d’extension qui fonctionne assez bien

     public static ssortingng ToHex(this Color color) { return Ssortingng.Format("#{0}{1}{2}{3}" , color.A.ToSsortingng("X").Length == 1 ? Ssortingng.Format("0{0}", color.A.ToSsortingng("X")) : color.A.ToSsortingng("X") , color.R.ToSsortingng("X").Length == 1 ? Ssortingng.Format("0{0}", color.R.ToSsortingng("X")) : color.R.ToSsortingng("X") , color.G.ToSsortingng("X").Length == 1 ? Ssortingng.Format("0{0}", color.G.ToSsortingng("X")) : color.G.ToSsortingng("X") , color.B.ToSsortingng("X").Length == 1 ? Ssortingng.Format("0{0}", color.B.ToSsortingng("X")) : color.B.ToSsortingng("X")); } 

    Réf: https://social.msdn.microsoft.com/Forums/en-US/4c77ba6c-6659-4a46-920a-7261dd4a15d0/how-to-convert-rgba-value-into-its-equivalent-hex-code? forum = winappswithcsharp

    Pour le code hexadécimal, essayez ceci

    1. Obtenir une représentation ARGB (Alpha, Rouge, Vert, Bleu) pour la couleur
    2. Filtrer le canal Alpha: & 0x00FFFFFF
    3. Formater la valeur (en hexadécimal “X6” pour hex)

    Pour un RVB

    1. Il suffit de formater les valeurs Red , Green et Blue

    la mise en oeuvre

     private static ssortingng HexConverter(Color c) { return Ssortingng.Format("#{0:X6}", c.ToArgb() & 0x00FFFFFF); } public static ssortingng RgbConverter(Color c) { return Ssortingng.Format("RGB({0},{1},{2})", cR, cG, cB); }