将System.Drawing.Color转换为RGB和hex值

使用C#我试图发展以下两个。 我这样做的方式可能会有一些问题,需要您的build议。 此外,我不知道是否有任何现有的方法来做同样的事情。

private static String HexConverter(System.Drawing.Color c) { String rtn = String.Empty; try { rtn = "#" + cRToString("X2") + cGToString("X2") + cBToString("X2"); } catch (Exception ex) { //doing nothing } return rtn; } private static String RGBConverter(System.Drawing.Color c) { String rtn = String.Empty; try { rtn = "RGB(" + cRToString() + "," + cGToString() + "," + cBToString() + ")"; } catch (Exception ex) { //doing nothing } return rtn; } 

谢谢。

我没有看到这个问题。 代码看起来不错。

我唯一能想到的就是try / catch块是多余的cRToString()是一个结构体,R,G和B是字节,所以c不能为null, cRToString()cGToString()cBToString()不能实际上失败(唯一的方法,我可以看到他们失败是一个NullReferenceException ,并没有一个实际上可以为空)。

你可以用下面的方法清理整个东西:

 private static String HexConverter(System.Drawing.Color c) { return "#" + cRToString("X2") + cGToString("X2") + cBToString("X2"); } private static String RGBConverter(System.Drawing.Color c) { return "RGB(" + cRToString() + "," + cGToString() + "," + cBToString() + ")"; } 

你可以保持简单,使用本地颜色翻译器:

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

然后将三个颜色对分成十进制forms:

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

例如

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

这可以避免KnownColor技巧。

如果您可以使用C#6,则可以从插值string中受益,并像这样重写@Ari Roth的解决scheme :

C#6:

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

也:

  • 我添加关键字this来使用它们作为扩展方法。
  • 您可以使用types关键字string而不是类名称。
  • 你可以使用lambda语法
  • 我把它们重命名为我的口味更明确。

我find了一个很好的扩展方法

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

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

对于hex代码试试这个

  1. 获取颜色的ARGB(阿尔法,红色,绿色,蓝色)表示
  2. 滤除 Alpha通道: & 0x00FFFFFF
  3. 格式化该值(hex“X6”为hex)

对于RGB一个

  1. 只需格式化 RedGreenBlue

履行

 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})", cR, cG, cB); }