151 votes

Convertir System.Drawing.Color en valeurs RVB et Hex

En utilisant C #, j'essayais de développer les deux suivants. La façon dont je le fais peut poser problème et nécessiter votre aimable conseil. De plus, je ne sais pas s’il existe une méthode pour faire de même.

 private static String HexConverter(System.Drawing.Color c)
{
    String rtn = String.Empty;
    try
    {
        rtn = "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
    }
    catch (Exception ex)
    {
        //doing nothing
    }

    return rtn;
}

private static String RGBConverter(System.Drawing.Color c)
{
    String rtn = String.Empty;
    try
    {
        rtn = "RGB(" + c.R.ToString() + "," + c.G.ToString() + "," + c.B.ToString() + ")";
    }
    catch (Exception ex)
    {
        //doing nothing
    }

    return rtn;
}
 

Merci.

244voto

Ari Roth Points 1290

Je ne suis pas à voir le problème ici. Le code me semble bon.

La seule chose que je peux penser, c'est que les blocs try/catch sont redondantes -- la Couleur est un struct et R, G et B sont des octets, de sorte que c ne peut pas être null et c.R.ToString(), c.G.ToString(), et c.B.ToString() ne pouvez pas échouer (la seule façon dont je peux les voir, de ne pas avec un NullReferenceException, et aucun d'eux ne peut réellement être null).

Vous pourriez nettoyer le tout en place à l'aide de l'suivantes:

private static String HexConverter(System.Drawing.Color c)
{
    return "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
}

private static String RGBConverter(System.Drawing.Color c)
{
    return "RGB(" + c.R.ToString() + "," + c.G.ToString() + "," + c.B.ToString() + ")";
}

214voto

Troy Hunt Points 9745

Vous pouvez garder les choses simples et utiliser le traducteur de couleurs natif:

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

Puis divisez les trois paires de couleurs en décimales:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X