wake-up-neo.net

Konvertieren Sie System.Drawing.Color in RGB- und Hex-Wert

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.

113
Hoque

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() + ")";
}
182
Ari Roth

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);
176
Troy Hunt

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:

  • Ich füge das Schlüsselwort this hinzu, um sie als Erweiterungsmethoden zu verwenden.
  • Wir können das Typschlüsselwort string anstelle des Klassennamens verwenden.
  • Wir können Lambda-Syntax verwenden.
  • Ich benenne sie um, damit sie für meinen Geschmack eindeutiger sind.
34
aloisdg

z.B.

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

Dies kann den KnownColor-Trick vermeiden.

23
Andy Fong

Versuchen Sie dies für hexadezimalen Code

  1. Get ARGB-Darstellung (Alpha, Rot, Grün, Blau) für die Farbe
  2. Filter out Alpha-Kanal: & 0x00FFFFFF
  3. Formatieren Sie den Wert (als hexadezimales "X6" für hex)

Für RGB eins

  1. Nur Format ausRed, Green, Blue Werte

Implementierung

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);
}
1
Dmitry Bychenko

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"));
}

Ref: 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

1
user1