Mit C # habe ich versucht, die folgenden beiden zu entwickeln. Die Art, wie ich es tue, kann ein Problem haben und Ihren freundlichen Rat benötigen. Darüber hinaus weiß ich nicht, ob es eine Methode gibt, um das Gleiche zu tun.
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;
}
Vielen Dank.
Ich sehe das Problem hier nicht. Der Code sieht für mich gut aus.
Das einzige, woran ich denken kann, ist, dass die try/catch-Blöcke redundant sind - Color ist eine Struktur und R, G und B sind Bytes, also kann c nicht null sein und c.R.ToString()
, c.G.ToString()
und c.B.ToString()
können nicht wirklich fehlschlagen (der einzige Weg, wie ich sehe, dass sie fehlschlagen, ist ein NullReferenceException
, und keiner von ihnen kann tatsächlich null sein).
Sie können das Ganze folgendermaßen aufräumen:
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() + ")";
}
Sie können es einfach halten und den nativen Farbübersetzer verwenden:
Color red = ColorTranslator.FromHtml("#FF0000");
string redHex = ColorTranslator.ToHtml(red);
Dann zerlegen Sie die drei Farbpaare in ganzzahlige Form:
int value = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
Wenn Sie C # 6 verwenden können, können Sie von Interpolated Strings profitieren und @ Ari Roths Lösung wie folgt umschreiben:
C # 6:
public static class ColorConverterExtensions
{
public static string ToHexString(this Color c) => $"#{c.R:X2}{c.G:X2}{c.B:X2}";
public static string ToRgbString(this Color c) => $"RGB({c.R}, {c.G}, {c.B})";
}
Ebenfalls:
this
hinzu, um sie als Erweiterungsmethoden zu verwenden.string
anstelle des Klassennamens verwenden.z.B.
ColorTranslator.ToHtml(Color.FromArgb(Color.Tomato.ToArgb()))
Dies kann den KnownColor-Trick vermeiden.
Versuchen Sie dies für hexadezimalen Code
& 0x00FFFFFF
Für RGB eins
Red
, Green
, Blue
WerteImplementierung
private static string HexConverter(Color c) {
return String.Format("#{0:X6}", c.ToArgb() & 0x00FFFFFF);
}
public static string RgbConverter(Color c) {
return String.Format("RGB({0},{1},{2})", c.R, c.G, c.B);
}
Ich habe eine Erweiterungsmethode gefunden, die recht gut funktioniert
public static string ToHex(this Color color)
{
return String.Format("#{0}{1}{2}{3}"
, color.A.ToString("X").Length == 1 ? String.Format("0{0}", color.A.ToString("X")) : color.A.ToString("X")
, color.R.ToString("X").Length == 1 ? String.Format("0{0}", color.R.ToString("X")) : color.R.ToString("X")
, color.G.ToString("X").Length == 1 ? String.Format("0{0}", color.G.ToString("X")) : color.G.ToString("X")
, color.B.ToString("X").Length == 1 ? String.Format("0{0}", color.B.ToString("X")) : color.B.ToString("X"));
}