Сопоставить двойное значение с цветом - PullRequest
0 голосов
/ 31 марта 2011

Я хотел бы сделать карту значений для цвета. Например, значение от 0 до 25 будет представлять собой изменение синего цвета от светлого к темному. Я никогда не делал этого, поэтому я хотел бы получить несколько советов и объяснений по основам. Спасибо за помощь.

Ответы [ 4 ]

6 голосов
/ 31 марта 2011

Первый шаг - выбрать цвета для фиксированных точек, таких как белый для 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);

и используйте его как хотите. : -)

2 голосов
/ 29 сентября 2011

Вот мое решение на gisthub для двойного цветового картирования с сине-красным градиентом.

пример результата: значения 0 - 100 с шагом 1 1

0 голосов
/ 31 марта 2011

Если вы используете RGB, чем выше значение -> тем ярче будет цвет

(255,255,255) - белый

(0,0,0) черный

Поскольку 255 является самым большим параметром, вы можете разделить его на желаемое количество синих вариаций

Примечание: (R, G, B) - целочисленные параметры, я предлагаю найти хороший знаменатель, такой как 17, который дает ровно 15 различных вариаций синего цвета

0 голосов
/ 31 марта 2011

Ну, в C ++, сделайте что-то вроде

vector<Color> myvector;

for(int i = 0; i < 25; i++){
    myvector.push_bacK(Color(0,0,(int)(round(double(255/(i+1))));
}

и ваш вектор будет содержать оттенки синего ...

...