使用C#我试图开发以下两个。我这样做可能有一些问题,需要你的建议。另外,我不知道是否有任何现有方法可以做同样的事情。
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;
}
感谢。
答案 0 :(得分:175)
我没有在这里看到问题。代码对我来说很好。
我唯一能想到的是try / catch块是冗余的 - Color是一个结构,R,G和B是字节,所以c不能为空c.R.ToString()
,{ {1}},而c.G.ToString()
实际上不会失败(我看到它们失败的唯一方法是使用c.B.ToString()
,并且它们都不能实际为空。)
您可以使用以下方法清理整个内容:
NullReferenceException
答案 1 :(得分:172)
您可以保持简单并使用原生颜色转换器:
Color red = ColorTranslator.FromHtml("#FF0000");
string redHex = ColorTranslator.ToHtml(red);
然后将三个颜色对分成整数形式:
int value = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
答案 2 :(得分:29)
如果你可以使用C#6,你可以从Interpolated Strings中受益,并像这样重写@Ari Roth's solution:
C#6:
70
此外:
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})";
}
以将其用作扩展方法。this
代替类名。答案 3 :(得分:22)
e.g。
ColorTranslator.ToHtml(Color.FromArgb(Color.Tomato.ToArgb()))
这可以避免使用KnownColor技巧。
答案 4 :(得分:1)
我找到了一种效果很好的扩展方法
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"));
}
参考:http://dotnetcatch.com/2016/04/27/setparameters-via-msbuild-commandline/
答案 5 :(得分:1)
对于十六进制代码,请尝试使用
& 0x00FFFFFF
对于RGB one
Red
,Green
,Blue
值实施
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);
}