У меня есть треки GRP на карте, у которых есть трудности с 1 до 10. Я хочу, чтобы эти треки имели разный цвет в зависимости от сложности. Легкая трудность - зеленый, жесткий красный, а средний - оранжевый. Тем не менее, мне нужно иметь не только эти 3 цвета, но и более плавные переходы между ними. как один цвет для каждой точки сложности или один для каждой половины точки. Есть ли какой-либо алгоритм для вычисления этих цветов и их переходов? Как-то увеличивать/уменьшать значения rgb? Спасибо.Сложность для цветового преобразователя
1
A
ответ
0
using System;
using System.Drawing;
using System.Windows.Forms;
public partial class MainForm : Form
{
protected override void OnPaint(PaintEventArgs e)
{
Color[] colors = new Color[11];
colors[0] = Color.Green;
colors[1] = Interpolate(Color.Green, Color.Orange, 0.2);
colors[2] = Interpolate(Color.Green, Color.Orange, 0.4);
colors[3] = Interpolate(Color.Green, Color.Orange, 0.6);
colors[4] = Interpolate(Color.Green, Color.Orange, 0.8);
colors[5] = Color.Orange;
colors[6] = Interpolate(Color.Orange, Color.Red, 0.2);
colors[7] = Interpolate(Color.Orange, Color.Red, 0.4);
colors[8] = Interpolate(Color.Orange, Color.Red, 0.6);
colors[9] = Interpolate(Color.Orange, Color.Red, 0.8);
colors[10] = Color.Red;
Rectangle rect = new Rectangle(10, 10, 20, 90);
for (int i = 0; i < colors.Length; i++)
{
e.Graphics.FillRectangle(new SolidBrush(colors[i]), rect);
rect.Offset(20, 0);
}
base.OnPaint(e);
}
private static Color Interpolate(Color a, Color b, double t)
{
int R = (int)(a.R + (b.R - a.R) * t);
int G = (int)(a.G + (b.G - a.G) * t);
int B = (int)(a.B + (b.B - a.B) * t);
return Color.FromArgb(R, G, B);
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
1
Red = 255,0,0
Yellow = 255, 255, 0
Green = 0,255,0
Сделать цикл, который петлями от уровня 1 до 10.
Для каждого уровня создают цвет, как что-то вроде:
Red = level * 25.5;
Green = 255 - (level * 25.5);
Blue = 0;
Затем создайте цвет из значений RGB.
Очевидно, что это только псевдокод, но он должен дать вам представление о начале работы.
1
Что вы ищете, это возможность интерполировать цвета. Это может быть недостаточно, чтобы просто интерполировать два цвета (потому что вы можете получить ложные цвета между ними), но для обработки RGB RGB в качестве точки в 3D-пространстве и интерполирования вдоль полилинии (где каждая точка является цветным/промежуточным цветом), который представляет цвета (в вашем случае, трудности). Here - это ссылка, которая показывает, о чем я говорю.
+1 для правды. Существует много разных методов цветовой интерполяции. Вы делаете что-то простое и дискретное, так что вы можете просто взглянуть на него и называть его хорошим. В общем, хорошо понимать, что есть намного больше, чем это. –