在我的selenium代码中,我需要验证背景色代码是192856。但是当我得到这个元素的css属性时,它给了我rgba格式的颜色。现在我需要得到十六进制值本身的值。我该怎么做?
quickLinkstab.GetCssValue("background-color")
上面是“rgba(25,40,86,1)”的givingm e值,即rgba值。有没有办法把它转换回十六进制?或者我可以得到十六进制本身的值?
我也试过下面的代码
string colorcode = menuColor;
int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
Color clr = Color.FromArgb(argb);
int r = Convert.ToInt16(clr.R);
int g = Convert.ToInt16(clr.G);
int b = Convert.ToInt16(clr.B);
int a = Convert.ToInt16(clr.A);
string x = string.Format("rgba({0}, {1}, {2}, {3});", r, g, b,a);
但这个给了我一个值,比如“rgba(25,40,86,0);”。“A”值的差异。就像我的代码给我0表示“A”,但是cssvalue是1。
我更倾向于直接获取十六进制值的解决方案,如果不可能,则将rgba转换为十六进制。
最佳答案
以下代码包括十六进制格式、rgb格式和rgba格式。
public static class ColorHelper
{
public static Color ParseColor(string cssColor)
{
cssColor = cssColor.Trim();
if (cssColor.StartsWith("#"))
{
return ColorTranslator.FromHtml(cssColor);
}
else if (cssColor.StartsWith("rgb")) //rgb or argb
{
int left = cssColor.IndexOf('(');
int right = cssColor.IndexOf(')');
if (left < 0 || right < 0)
throw new FormatException("rgba format error");
string noBrackets = cssColor.Substring(left + 1, right - left - 1);
string[] parts = noBrackets.Split(',');
int r = int.Parse(parts[0], CultureInfo.InvariantCulture);
int g = int.Parse(parts[1], CultureInfo.InvariantCulture);
int b = int.Parse(parts[2], CultureInfo.InvariantCulture);
if (parts.Length == 3)
{
return Color.FromArgb(r, g, b);
}
else if (parts.Length == 4)
{
float a = float.Parse(parts[3], CultureInfo.InvariantCulture);
return Color.FromArgb((int)(a * 255), r, g, b);
}
}
throw new FormatException("Not rgb, rgba or hexa color string");
}
}
预期结果:
[TestClass]
public class ColorParserTest
{
[TestMethod]
public void TestParseColorRGB()
{
Color c = ColorHelper.ParseColor("rgb(110,120,130)");
Assert.AreEqual(110, c.R);
Assert.AreEqual(120, c.G);
Assert.AreEqual(130, c.B);
Assert.AreEqual(255, c.A);
}
[TestMethod]
public void TestParseColorRGBA()
{
Color c = ColorHelper.ParseColor("rgba(110,120,130,0.5)");
Assert.AreEqual(110, c.R);
Assert.AreEqual(120, c.G);
Assert.AreEqual(130, c.B);
Assert.AreEqual(127, c.A);
}
[TestMethod]
public void TestParseColorHexa()
{
Color c = ColorHelper.ParseColor("#192856");
Assert.AreEqual(25, c.R);
Assert.AreEqual(40, c.G);
Assert.AreEqual(86, c.B);
Assert.AreEqual(255, c.A);
}
}
关于c# - 如何将RGBA CSS颜色格式转换为十六进制格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38493140/