|
|
|
| имеется значение цвета в 16системе: f38124, он же в десятичной 15958308.
нужно подобрать разные оттенки этого цвета. Как сделать такое? | |
|
|
|
|
|
|
|
для: AlexSol
(10.08.2006 в 16:52)
| | А есть какая-то логика подбора цвета? Или просто нужно подобрать 1000 разных оттенков?
Вообще f38124 на самом деле количество Красного Зеленого и Синего. f3 - к, 82 - з, 24 - с. Считая, что оттенком является похожий цвет, то достаточно увеличивать (уменьшать) одну из этих пар чисел. Если, например, уменьшать количество зеленого, то общий цвет станет краснее ну и т.д.
он же в десятичной 15958308.
В десятичной на самом деле
243 - красный
129 - зеленый
36 - синий
|
P.S. Может что не так понял час ночи все таки :) | |
|
|
|
|
|
|
|
для: Ziq
(11.08.2006 в 01:17)
| | я вот сам пытаюсь логику задать (понять).
допустим есть два цвета: ff6600 и ffff00. что нужно сделать чтобы получить цвета в этом диапозоне. | |
|
|
|
|
|
|
|
для: Ziq
(11.08.2006 в 01:17)
| | Оттенок - так на русском языке обычно называют в windows компоненту цвета Hue из метрики (Hue, Saturation, Intensity) . Эта метрика более естественно воспринимается человеком, чем метрика дисплея (Red, Green, Blue).
Весьма грубо алгоритмы преобразования метрик RGB - HSI можно реализовать примерно так (функции rgb2hsi и hsi2rgb):
var hm = 240,sm = 240, im = 240;
function max3(a, b, c) { return Math.max(a,Math.max(b,c)); }
function min3(a, b, c) { return Math.min(a,Math.min(b,c)); }
function aRGB(qh0,qm1,qm2)
{
var qh = 1*qh0;
while(qh >= hm) qh -= hm;
while(qh < 0 ) qh += hm;
if(qh*6 < hm) return (qh*6/hm)*(qm2-qm1) + qm1;
if(qh*2 < hm) return qm2;
if(qh< 0.75*hm) return (4-(6*qh/hm))*(qm2-qm1) + qm1;
return qm1;
}
function hsi2rgb(ah,as,ai)
{
var m1, m2, H, L, S, R, G, B;
H = 1*ah; L = ai / im; S =as / sm;
m2 = L < 0.5 ? L * (1 + S) : S + L * (1 - S) ; m1 = 2 * L - m2;
if(S == 0)
L *= 255,
R=G=B=L;
else
R= 255*aRGB(H+(hm/3),m1,m2),
G= 255*aRGB(H ,m1,m2),
B= 255*aRGB(H-(hm/3),m1,m2);
return [R, G, B];
}
function rgb2hsi(ar,ag,ab)
{
var R = ar/255, G = ag/255, B = ab/255,
m1 = max3(R, G, B), m2 = min3(R, G, B),
L = (m1 + m2) / 2, H, S, m12, m21, Cr, Cg, Cb;
if(m1 == m2)
H = S = 0;
else
{
m12 = m1-m2; m21 = m1+m2;
S = m12 / (L<0.5 ? m21 : 2-m21 );
Cr = (m1 - R) / m12, Cg = (m1 - G) / m12, Cb = (m1 - B) / m12;
H = m1 == R ? Cb - Cg :
m1 == G ? 2 + Cr - Cb : 4 + Cg - Cr;
H *= hm/6;
if(H<0) H += hm; if(H>=hm) H -= hm;
}
S*=sm, L*=im;
return [H, S, L];
}
|
если надо подобрать цвет один раз, простейшим способом это сделать, на мой взгляд, будет вызвать редактор доп.цветов из настройки оформления свойств рабочего стола windows. Указать там RGB-компоненты исходного цвета, подкрутить нужное, и взять результат. | |
|
|
|
|
|
|
|
для: Trianon
(11.08.2006 в 09:47)
| | спасибо за алгоритм, буду разбирать. мне это для Flash надо - указать цвет+диапозон и чтоб генерились похожие цвета.
-------------
ps кажется Hue это именно цвет а не оттенок, за оттенок в ответе две другие составляющие. | |
|
|
|
|
|
|
|
для: AlexSol
(11.08.2006 в 10:13)
| | Первая составляющая действительно обычно называется цветом. Две другие составляющие - насыщенность и яркость.
Но в том интерфейсе настройки цветов оформления рабочего стола, о котором я упомянул,
они фигурируют под названиями - соответственно - оттенок, контраст, яркость. | |
|
|
|
|