□ // File HLS2RGB,cpp
void HLS2RGB (float h, float I, float s, float& r, float& g, f!oat& b )
{
float ml, m2;
if (l<= 0.5 )
m2 = I * (1 + s );
else
m2 = l + s-l*s;
ml = 2*l-m2;
if ( s == 0 )
if (h == HUE_UNDEFINED ) r = g = b = l;
else
error ();
else {
r= HLSValue ( ml, m2, h + 120 ); g = HLSValue ( ml, m2, h );
1. Свет. Цветовосприятие. Цветовые модели
b = HLSValue ( ml, m2, h -120 );
}
}
float HLSValue (float ml, float m2, float hue ) {
if ( hue >= 360 )
hue -= 360;
if ( hue < 0 )
hue += 360;
if ( hue < 60 )
return ml + ( m2 - ml ) * hue / 60;
else
if (hue < 180)
return m2;
else
if ( hue < 240 )
return ml + ( m2 - ml ) * ( 240 - hue ) / 60;
else
return ml;
}
Дополнительную информацию по вопросам, затронутым в этой главе, можно ти в Internet по следующим адресам:
ftp://ftp.inforarnp.net/pub/users/poynton/doc/colour/
http 7/w w w. inforamp. net/~poynton/
ftp://ftp.westminster.ac.ulc/pub/itrg/
Упражнения Докажите, что для двух произвольных точек на хроматической диаграмме взвешенная сумма соответствующих цветов лежит на отрезке, соединяющем эти точки.
Напишите процедуру преобразования цвета из модели RGB в модель HLS.
Напишите программу на нахождения значения ^для своего монитора. Стандартный подход заключается в построении квадрата, заполняемого шаблоном из черных и белых точек, дающим среднюю интенсивность в 0.5 от белого. В центре этого квадрата рисуется квадрат меньшего размера, заполненный серым цветом. Для этого серого цвета путем подбора RGB-значений в палитре добиваются совпадения средних интенсивностей и параметр у находится из соотноше у, ния R = 0.5, где R - нормированное (т. е. лежащее в промежутке [0,1]) значение красной компоненты (вместо красной можно взять любую другую, так как для оттенков серого все три RGB-компоненты совпадают между собой).
Глава 2
РАСПРОСТРАНЕНИЕ СВЕТА. ОСВЕЩЕННОСТЬ
Во взаимодействии света с веществом можно выделить два основных аспекта: распространение света в однородной среде и взаимодействие света с границей раздела двух сред.
Распространение света в однородной среде происходит вдоль прямолинейной траектории с постоянной скоростью. Отношение скорости распространения света в вакууме к скорости распространения света в среде называется коэффициентом преломления (индексом рефракции) среды г/. Обычно этот коэффициент зависит от длины волны Л луча (эту зависимость мы в дальнейшем будем игнорировать).