C#不同值的颜色色调
我想要一些关于如何在C#中完成以下任务的建议。我想画一个“颜色”,确切的颜色将由属性值决定,为了这个例子,让我们假设它是一个百分比 理想情况下,我希望用户指定五种颜色C#不同值的颜色色调,c#,colors,range,rgb,color-scheme,C#,Colors,Range,Rgb,Color Scheme,我想要一些关于如何在C#中完成以下任务的建议。我想画一个“颜色”,确切的颜色将由属性值决定,为了这个例子,让我们假设它是一个百分比 理想情况下,我希望用户指定五种颜色 Negative MAX Negative MIN Even Positive MIN Positive MAX 用户仅为每个级别指定颜色,而不是确定最小值和最大值的值 使用这些数据,我希望能够根据百分比计算颜色。i、 e.57%会导致颜色色调介于正最小值和正最大值之间。请提供任何帮助或建议。要在两种颜色之间
Negative MAX
Negative MIN
Even
Positive MIN
Positive MAX
用户仅为每个级别指定颜色,而不是确定最小值和最大值的值
使用这些数据,我希望能够根据百分比计算颜色。i、 e.57%会导致颜色色调介于正最小值和正最大值之间。请提供任何帮助或建议。要在两种颜色之间插值,只需对每个颜色通道进行插值
Color color1 = Color.Red;
Color color2 = Color.Green;
double fraction = 0.3;
Color color3 = Color.FromArgb(
(int)(color1.R * fraction + color2.R * (1 - fraction)),
(int)(color1.G * fraction + color2.G * (1 - fraction)),
(int)(color1.B * fraction + color2.B * (1 - fraction)));
要沿比例进行插值,您需要确定“步数”的准确百分比值,并将目标值投影到其中两个颜色步数之间的分数。使用复制的函数,您可以将色调转换回RGB颜色。此函数假定所有输入和输出都以0..1的比例输入,因此需要将color.GetHue()除以255。函数下面是一些使用一组百分比的示例代码;在您选择的UI中实现DisplayColor以查看结果
public static void HSVToRGB(double H, double S, double V, out double R, out double G, out double B)
{
if (H == 1.0)
{
H = 0.0;
}
double step = 1.0/6.0;
double vh = H/step;
int i = (int) System.Math.Floor(vh);
double f = vh - i;
double p = V*(1.0 - S);
double q = V*(1.0 - (S*f));
double t = V*(1.0 - (S*(1.0 - f)));
switch (i)
{
case 0:
{
R = V;
G = t;
B = p;
break;
}
case 1:
{
R = q;
G = V;
B = p;
break;
}
case 2:
{
R = p;
G = V;
B = t;
break;
}
case 3:
{
R = p;
G = q;
B = V;
break;
}
case 4:
{
R = t;
G = p;
B = V;
break;
}
case 5:
{
R = V;
G = p;
B = q;
break;
}
default:
{
// not possible - if we get here it is an internal error
throw new ArgumentException();
}
}
}
Color min = Color.Blue;
Color max = Color.Green;
float minHue = min.GetHue() / 255;
float maxHue = max.GetHue() / 255;
float scale = maxHue - minHue;
float[] percents = new float[] { .05F, .15F, .40F, .70F, .85F, .95F };
foreach (var pct in percents) {
float curHue = minHue + (scale * pct);
double r, g, b;
HSVToRGB(curHue, 1.0, 1.0, out r, out g, out b);
Color curColor = Color.FromArgb((int)(r * 255), (int)(g * 255), (int)(b * 255));
DisplayColor(curColor);
}
请澄清你的问题,我真的不明白你在问什么!希望这能解释我想要什么。如果还有什么不清楚的地方,请告诉我。这看起来很好,你还需要什么吗?应该注意的是,一些最小/最大颜色会导致刻度大于1,这让我觉得有些地方不太正确,但这与你要找的非常接近。