我正在用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;
}
谢谢。
6条答案
按热度按时间ovfsdjhp1#
我看不出有什么问题。代码看起来不错。
我唯一能想到的是try/catch代码块是冗余的-- Color是一个结构体,R、G和B是字节,因此c不能为null,
c.R.ToString()
、c.G.ToString()
和c.B.ToString()
实际上不会失败(我能看到它们失败的唯一方法是使用NullReferenceException
,它们实际上都不能为null)。您可以使用以下代码来清理整个事件:
nwlqm0z12#
您可以保持简单,并使用本机颜色转换器:
然后将三个颜色对分解为整数形式:
2ekbmq323#
如果你能使用C#6或更高版本,你就能从Interpolated Strings中获益,并像这样重写@Ari Roth的解:
C# 6:
还有:
this
以将它们用作扩展方法。string
代替类名。编辑:如果要支持Alpha通道:
有趣的事实:我必须搜索 proportion 名称,因为我们需要区间为
[0, 1]
的值,而不是区间为[0, 100]
的百分比o3imoua44#
例如:
这样可以避免“已知颜色”技巧。
sqxo8psd5#
我发现了一个扩展方法,效果很好
参考: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
plupiseo6#
对于十六进制代码,请尝试以下操作
1.* 获取颜色的 * ARGB(Alpha、红色、绿色、蓝色)表示
1.* 滤出 * Alpha通道:
& 0x00FFFFFF
1.格式化输出值(十六进制“X6”表示十六进制)
对于RGB 1
1.只需 * 格式化输出 *
Red
、Green
、Blue
值执行情况