Цвета - это многомерное пространство, поэтому вы должны выбрать способ интерполяции. Необычно просто нарисовать «прямую» линию с RGB, поскольку размеры не очень хорошо работают.
Один простой способ - использовать HSB / V / L цветовое пространство . Многие современные языки программирования автоматически преобразуются в это пространство, например, см. [Методы java Color] [2]. В противном случае математика не так уж сложна. Статья в Википедии объясняет это .
У меня была ситуация, когда это делало не то, что я хотел - например, я хотел стиль светофора "переходить от красного к зеленому через янтарь". В этом случае я использовал следующий код, который был «достаточно хорош». Как вы можете видеть, я немного узнал об отношениях между RGB и цветом. Это не так настраиваемо, как вы могли бы хотеть, но дает пример метода, который вы могли бы использовать:
private static int makeTrafficLight(float fraction, int brightness) {
final float orange = 0.4f;
if(fraction < orange) {
int r = brightness;
float f = fraction/orange;
int g = (int)(brightness*(f/2.0f));
int b = 0;
return Color.rgb(r,g,b);
} else {
float f = ((fraction-orange)/(1.0f-orange));
int r = (int)(brightness*(1.0f-f));
int g = (int)(brightness*(f/2.0f+0.5f));
int b = 0;
return Color.rgb(r,g,b);
}
}
[2]: http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Color.html#HSBtoRGB(float, плавать, плавать)