En utilisant C #, j'essayais de développer les deux suivants. La façon dont je le fais peut poser problème et avoir besoin de vos aimables conseils. De plus, je ne sais pas s'il existe une méthode existante 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.
c#
asp.net
rgb
system.drawing.color
Nazmul
la source
la source
Réponses:
Je ne vois pas le problème ici. Le code me semble bon.
La seule chose que je peux penser est que les try / blocs catch sont redondants - La couleur est un struct et R, G, et B sont des octets, donc c ne peut pas être nulle et non
c.R.ToString()
,c.G.ToString()
etc.B.ToString()
ne peut manquer en fait (le la seule façon dont je peux les voir échouer est avec aNullReferenceException
, et aucun d'entre eux ne peut être nul).Vous pouvez tout nettoyer en utilisant les éléments suivants:
la source
Vous pouvez rester simple et utiliser le traducteur de couleurs natif:
Puis divisez les trois paires de couleurs sous forme entière:
la source
Si vous pouvez utiliser C # 6 ou supérieur, vous pouvez bénéficier de Interpolated Strings et réécrire la solution de @Ari Roth comme ceci:
C # 6:
Aussi:
this
pour les utiliser comme méthodes d'extensions.string
au lieu du nom de la classe.la source
par exemple
Cela peut éviter l'astuce KnownColor.
la source
J'ai trouvé une méthode d'extension qui fonctionne assez bien
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
la source
X2
au lieu deX
, sinon vous pourriez obtenir1
au lieu de01
cela, ce sera un problème.X2
alors vous n'avez pas besoin de tous lescolor.B.ToString("X").Length == 1 ?
ternaires.Pour le code hexadécimal, essayez ceci
& 0x00FFFFFF
Pour RVB un
Red
,Green
, lesBlue
valeursla mise en oeuvre
la source