{____________________Putting Colors in Order_________________________}
{ LISTING ONE }
{--------------------------------------}
procedure Hvc2Rgb( H, V, C : Double; var R, G, B : Double);
{ Converts H-hue, V-value, C-chroma to R-red, G-green, B-blue }
const
Pi = 3.14159265358979324;
Pi2o3 = 2.0 * Pi / 3.0;
DpR = 180.0 / Pi; { Degrees per Radian }
var
HRad : Double;
begin
HRad:= H / DpR;
R:= V - C * Cos( HRad + Pi2o3);
G:= V - C * Cos( HRad);
B:= V - C * Cos( HRad - Pi2o3);
end; { Hvc2Rgb }
{ END LISTING ONE }
{ LISTING TWO }
{--------------------------------------}
function ATan2( Y, X : Double) : Double; { Arc Tangent of Y over X }
{ -Pi < ATan2 <= Pi }
const
Pi = 3.14159265358979324;
Pio2 = Pi / 2.0;
var
Temp : Double;
begin
if X = 0 then begin
if Y > 0 then ATan2:= Pio2
else if Y < 0 then ATan2:= -Pio2
else ATan2:= 0;
end
else begin
Temp:= ArcTan( Y / X);
if X > 0 then ATan2:= Temp
else if Y >= 0 then ATan2:= Temp + Pi
else ATan2:= Temp - Pi;
end;
end; { ATan2 }
{--------------------------------------}
procedure Rgb2Hvc( R, G, B : Double; var H, V, C : Double);
{ Converts R-red, G-green B-blue, to H-hue, V-value, C-chroma }
const
Pi = 3.14159265358979324;
Pi2 = 2.0 * Pi;
DpR = 180.0 / Pi; { Degrees per Radian }
SqRt3 = 1.73205080756887719; { Square root of 3.0 }
var
CosHue : Double;
HRad : Double;
begin
V:= (R + G + B) / 3.0;
HRad:= ATan2( R - B, SqRt3 * (V - G));
CosHue:= Cos( HRad);
if abs( CosHue) > 0.2 then
C:= (V - G) / CosHue
else
C:= (R - B) / (SqRt3 * Sin( HRad));
H:= HRad * DpR;
if H < 0.0 then H:= H + 360.0;
end; { Rgb2Hvc }
{ END LISTING TWO }
{ LISTING THREE }
{--------------------------------------}
procedure Ega2Rgb( EgaCode : Integer; var R, G, B : Double);
{ Converts EGA color number to R-red, G-green B-blue }
begin
R:= 0.0; G:= 0.0; B:= 0.0;
if (EgaCode and 1) <> 0 then B:= B + 0.75;
if (EgaCode and 2) <> 0 then G:= G + 0.75;
if (EgaCode and 4) <> 0 then R:= R + 0.75;
if (EgaCode and 8) <> 0 then B:= B + 0.25;
if (EgaCode and 16) <> 0 then G:= G + 0.25;
if (EgaCode and 32) <> 0 then R:= R + 0.25;
end; { Ega2Rgb }
{ END LISTINGS }