如何从 ARGB 中删除重复的字符
Posted
技术标签:
【中文标题】如何从 ARGB 中删除重复的字符【英文标题】:how to remove duplicate char from ARGB 【发布时间】:2020-09-16 07:39:36 【问题描述】:我正在尝试获取十六进制形式的 rgb 颜色
public string GetCssValue(IWebElement iwe, string cssValue)
var value = iwe.GetCssValue(cssValue);
string[] numbers = value.Replace("rgba(", "").Replace(")", "").Split(",");
int a = int.Parse(numbers[0]);
int r = int.Parse(numbers[1]);
int g = int.Parse(numbers[2]);
int b = int.Parse(numbers[3]);
Color myColor = Color.FromArgb(a, r, g, b);
string hex = "#" + myColor.A.ToString("X2") + myColor.R.ToString("X2") +
myColor.G.ToString("X2") + myColor.B.ToString("X2");
这里的十六进制是获取值 #FFEEEE01 而我在页面上的 css 是 #fee 以便我可以比较两个字符串(预期的,实际的)
我怎样才能将#fee 作为我的十六进制值。 这个X2在这里代表什么
【问题讨论】:
docs.microsoft.com/en-us/dotnet/standard/base-types/….Split(",")
这可以编译吗? the documentation 中没有采用单个字符串参数的重载。
我不确定开箱即用的 ToString
是否能够做到这一点。似乎 CSS 使用的 3 位 RGB 格式是“特殊的”。
您是否考虑在比较期间将#fee 值“扩展”为更长的#ffeeee01 版本?似乎比尝试另一种方式更容易。但也许没关系..
另外,我可能在这里遗漏了一些东西......给出#FFEEEE01 值的Color
是黄色的(A:255,R:238,G :238, B:1)。 #fee CSS 颜色是超浅粉色/红色。他们应该是一样的吗?还是它们只是 2 个不同的例子?
【参考方案1】:
更改代码以返回值的快速方法是仅连接 RGB
值中的第一个字符:
string hex = "#" + myColor.R.ToString("X2")[0] + myColor.G.ToString("X2")[0] +
myColor.B.ToString("X2")[0];
但是,由于只有 6 位代码的子集可以准确地转换为 3 位代码(仅限具有重复字符的代码),因此编写一个帮助方法来转换值可能会有所帮助:
public string GetThreeDigitRGB(Color color)
// Get the 2-character RGB color codes
var r = color.R.ToString("X2");
var g = color.G.ToString("X2");
var b = color.B.ToString("X2");
// Every color must have a repeating character for its code, otherwise we return null
return r[0] == r[1] && g[0] == g[1] && b[0] == b[1]
? $"#r[0]g[0]b[0]"
: null;
然后可以修改您的原始代码以从输入创建一个Color
对象并将其传递给我们上面的辅助方法以获取 3 位代码(另请注意我们以 RGBA 顺序获取颜色值的更改,这是它们的传递方式):
public string GetCssValue(IWebElement iwe, string cssValue)
var value = iwe.GetCssValue(cssValue);
string[] numbers = value.Replace("rgba(", "").Replace(")", "").Split(",");
// Note the change to get the colors in the correct order
int r = int.Parse(numbers[0]);
int g = int.Parse(numbers[1]);
int b = int.Parse(numbers[2]);
int a = int.Parse(numbers[3]);
// Create a color from the values
Color myColor = Color.FromArgb(a, r, g, b);
// Call our helper method to get the three digit code from the color
return GetThreeDigitRGB(myColor);
【讨论】:
以上是关于如何从 ARGB 中删除重复的字符的主要内容,如果未能解决你的问题,请参考以下文章