使用独特的数字刷
本文关键字:数字 | 更新日期: 2023-09-27 18:05:36
我喜欢显示一些十进制数字。在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;
}
我不知道我的问题出了什么问题,但不管怎样。只需要一个函数为每个唯一的数字返回一个唯一的刷子。这些数字看起来如何并不重要
您总是可以根据value.ToString()中的字节生成LinearGradientBrush
和GradientStops
。如果需要,您也可以将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()));
}