Первый шаг - выбрать цвета для фиксированных точек, таких как белый для 0 и синий для 25, как вы предлагаете. Затем вы можете добавить зеленый для 50, красный для 75 и т. Д.
Каждая фиксированная точка соответствует значению R G B. Если мы используем числа от 0 до 1, математика будет проще:
Value Red Green Blue
0 0.33 0.33 0.34
25 0.00 0.00 1.00
50 0.00 1.00 0.00
Если вы будете поддерживать постоянную величину R + G + B, интенсивность цвета будет постоянной (см .: http://en.wikipedia.org/wiki/HSL_and_HSV)
Теперь вы устанавливаете, между какими двумя фиксированными цветами вы находитесь. Вы получаете значения RGB для нижней границы диапазона и для верхней части. Давайте работать со значением 15 в качестве примера. 15 - от 0 до 25, поэтому:
rLow = 0.33f; gLow = 0.33f; bLow = 0.34f;
rHigh = 0.0f; gHigh = 0.0f; bHigh = 0.0f;
float prop = ( x - vLow) / ( vHigh - vLow );
[e.g. = ( 15 - 0 ) / ( 25 - 0 ) = 0.6 ]
Тогда для каждого цвета вы делаете:
float rVal = rLow + prop * ( rHigh - rLow );
[e.g. = 0.33 + 0.6 * ( 0.00 - 0.33 ) = 0.132 ]
Точно так же вы интерпретируете для зеленого и синего:
float gVal = gLow + prop * ( gHigh - gLow );
float bVal = bLow + prop * ( bHigh - bLow );
Синий пример выглядит так:
[e.g. = 0.34 + 0.6 * ( 1.00 - 0.34 ) = 0.736 ]
Затем вы можете создать объект Java Color следующим образом:
Color col = новый цвет (rVal, gVal, bVal);
и используйте его как хотите. : -)