Как программно в .NET перевести номер цветового кода от 0 до 140 в коды RBG? - PullRequest
0 голосов
/ 16 января 2019

Как программно в .NET преобразовать номер цветового кода от 0 до 140 в коды RBG для синего через желтый?
Цветовой код 0 должен переводиться в индиго-синий, а 140 - в желтый, как показано на графике ниже. Похоже, зеленый посередине.

ЦВЕТ НОМЕР КОДА ЦВЕТА

Мне нужно перевести число справа (0-140ish) в смежный цвет слева. enter image description here

1 Ответ

0 голосов
/ 16 января 2019

Разбейте свою шкалу на четыре части.По мере увеличения цветовой шкалы секция 1 - красный / синий с уменьшением красного, секция 2 - сине-зеленая с усилением зеленого, секция 3 - сине-зеленая с уменьшением синего, а секция 4 - зеленая / красная с усилением красного.

Непроверенный образец ниже.Возможно, вам придется внести коррективы в зависимости от требуемой компоновки вашего значения RGB.

private static readonly double n35 = 35;

public static int CalculateRgb(byte colorIndex)
{
    if (colorIndex > 140)
    {
        throw new ArgumentOutOfRangeException(nameof(colorIndex));
    }

    byte red = 0, green = 0, blue = 0;

    if (colorIndex <= 35)
    {
        blue = 255
        red = 255 * (n35 - (double) colorIndex) / n35);
    }
    else if (colorIndex <= 70)
    {
        colorIndex -= 35;

        blue = 255
        green = 255 * ((double) colorIndex / 35);
    }
    else if (colorIndex <= 105)
    {
        colorIndex -= 70;

        green = 255
        blue = 255 * (n35 - (double) colorIndex) / n35);
    }
    else
    {
        colorIndex -= 105;

        green = 255
        red = 255 * ((double) colorIndex) / n35);
    }

    return
        (red << 24) |
        (green << 16) |
        (blue << 8);
}
...