如何从 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 中删除重复的字符的主要内容,如果未能解决你的问题,请参考以下文章

如何从PHP和Javascript中的字符串中删除所有空格[重复]

如何从字符串中删除所有html标签[重复]

如何从列表中删除一个字符[重复]

如何使用mysql从字符串中删除双引号[重复]

php如何从php中的字符串中删除最后一个字符[重复]

如何从ArrayList中删除重复的字符串[重复]