получить уникальную кисть для чисел - PullRequest
0 голосов
/ 14 августа 2011

Мне нравится отображать некоторые десятичные числа. Как можно больше людей должны иметь уникальную кисть в WPF.

пример

-1.00 (display in Green and Orange)
0.00 (display in Orange)
1.00 (display in Green)
2.00 (display in Red)

указанный шаблон не требуется.


Для моего случая RBG слишком маленький.

255 * 255 * 255 = 16 581 375


Цвет значения должен быть всегда одинаковым.


public Brush GetValueColor(decimal value)
{
    //Generate Brush for value
    return myBrush;
}

Я не знаю, что не так с моим вопросом, но что угодно. Просто нужна функция, чтобы вернуть уникальную кисть для каждого уникального числа. Не имеет значения, как выглядят цифры.

1 Ответ

2 голосов
/ 14 августа 2011

Вы всегда можете сгенерировать LinearGradientBrush с GradientStops на основе байтов из value.ToString ().При необходимости вы также можете обратить LinearGradientBrush обратно к десятичному значению.

GetValueColor

public LinearGradientBrush GetValueColor(decimal value)
{
    LinearGradientBrush brush = new LinearGradientBrush();
    byte[] byteArray = Encoding.ASCII.GetBytes(value.ToString());
    for (int i = 0; i < byteArray.Length; i += 3)
    {
        byte red = byteArray[i];
        byte green = i < byteArray.Length - 1 ? byteArray[i + 1] : (byte)0;
        byte blue = i < byteArray.Length - 2 ? byteArray[i + 2] : (byte)0;
        brush.GradientStops.Add(
            new GradientStop(new Color {A = 255, R = red, G = green, B = blue },
                                            (double)(i+1) / byteArray.Length));
    }
    return brush;
}

Реверс: GetColorValue

public decimal GetColorValue(LinearGradientBrush brush)
{
    List<byte> byteList = new List<byte>();
    foreach (GradientStop gradientStop in brush.GradientStops)
    {
        byteList.Add(gradientStop.Color.R);
        byteList.Add(gradientStop.Color.G);
        byteList.Add(gradientStop.Color.B);
    }
    return Convert.ToDecimal(Encoding.ASCII.GetString(byteList.ToArray()));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...