Hoq*_*que 115 c# asp.net rgb system.drawing.color
使用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;
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
Ari*_*oth 186
我没有在这里看到问题.代码对我来说很好.
我能想到的唯一的事情是,try/catch块是多余的-颜色是一个结构和R,G和B是字节,所以C不能为空并且c.R.ToString()
,c.G.ToString()
和c.B.ToString()
实际上不能失败(在唯一可以看到它们失败的方法是使用a NullReferenceException
,而且它们中没有一个实际上可以为null).
您可以使用以下方法清理整个事情:
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() + ")";
}
Run Code Online (Sandbox Code Playgroud)
Tro*_*unt 178
您可以保持简单并使用原生颜色转换器:
Color red = ColorTranslator.FromHtml("#FF0000");
string redHex = ColorTranslator.ToHtml(red);
Run Code Online (Sandbox Code Playgroud)
然后将三个颜色对分成整数形式:
int value = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
Run Code Online (Sandbox Code Playgroud)
alo*_*ica 34
如果您可以使用C#6,您可以从Interpolated Strings中受益,并重写@Ari Roth的解决方案,如下所示:
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})";
}
Run Code Online (Sandbox Code Playgroud)
也:
this
以将它们用作扩展方法.string
而不是类名.And*_*ong 23
例如
ColorTranslator.ToHtml(Color.FromArgb(Color.Tomato.ToArgb()))
Run Code Online (Sandbox Code Playgroud)
这可以避免KnownColor技巧.