как удалить повторяющийся символ из ARGB - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь получить цвета 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

1 Ответ

0 голосов
/ 29 мая 2020

Быстрый способ изменить код для возврата значения - это объединить только первый символ из RGB значений:

string hex = "#" + myColor.R.ToString("X2")[0] + myColor.G.ToString("X2")[0] + 
    myColor.B.ToString("X2")[0];

Но, поскольку только подмножество 6- Коды di git могут быть точно преобразованы в коды 3-di git (только те, которые содержат повторяющиеся символы), было бы полезно написать вспомогательный метод для преобразования значений:

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-di git (также обратите внимание на изменение, в котором мы получаем значения цвета в порядке 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);
}
...