Statistics: Posted by sephult — 10 Dec 2014, 00:51
Statistics: Posted by sephult — 09 Dec 2014, 19:31
type TColor = -$7FFFFFFF-1..$7FFFFFFF;
///////////////////////////////////////////////////////////////////
function RGBtoBGR (rgb: integer): integer;
begin
Result := $10000*round(Byte(rgb)) + $100*round (Byte(rgb shr) + round (Byte(rgb shr 16));
end;
///////////////////////////////////////
function RGB(r, g, b: Byte): TColor;
begin
Result := (r or (g shlor (b shl 16));
end;
///////////////////////////////////////
function HSLtoRGB (H, S, L: single): TColor;
var
M1, M2: single;
function HueToColourValue (Hue: single) : byte;
var
V : double;
begin
if Hue < 0 then
Hue := Hue + 1
else
if Hue > 1 then
Hue := Hue - 1;
if 6 * Hue < 1 then
V := M1 + (M2 - M1) * Hue * 6
else
if 2 * Hue < 1 then
V := M2
else
if 3 * Hue < 2 then
V := M1 + (M2 - M1) * (2/3 - Hue) * 6
else
V := M1;
Result := round (255 * V)
end;
var
R, G, B: byte;
begin
if S = 0 then
begin
R := round (255 * L);
G := R;
B := R
end else begin
if L <= 0.5 then
M2 := L * (1 + S)
else
M2 := L + S - L * S;
M1 := 2 * L - M2;
R := HueToColourValue (H + 1/3);
G := HueToColourValue (H);
B := HueToColourValue (H - 1/3)
end;
Result := RGB (R, G, B)
end;
///////////////////////////////////////
procedure RGBtoHSL (RGB: TColor; var H, S, L : single);
var
R, G, B, D, Cmax, Cmin: single;
begin
R := GetRValue (RGB) / 255;
G := GetGValue (RGB) / 255;
B := GetBValue (RGB) / 255;
Cmax := MaxS (R, MaxS (G, B));
Cmin := MinS (R, MinS (G, B));
// calculate luminosity
L := (Cmax + Cmin) / 2;
if Cmax = Cmin then // it's grey
begin
H := 0; // it's actually undefined
S := 0
end else begin
D := Cmax - Cmin;
// calculate Saturation
if L < 0.5 then
S := D / (Cmax + Cmin)
else
S := D / (2 - Cmax - Cmin);
// calculate Hue
if R = Cmax then
H := (G - B) / D
else
if G = Cmax then
H := 2 + (B - R) /D
else
H := 4 + (R - G) / D;
H := H / 6;
if H < 0 then
H := H + 1
end
end;
///////////////////////////////////////
function GetRValue(rgb: DWORD): Byte;
begin
Result := Byte(rgb);
end;
///////////////////////////////////////
function GetGValue(rgb: DWORD): Byte;
begin
Result := Byte(rgb shr;
end;
///////////////////////////////////////
function GetBValue(rgb: DWORD): Byte;
begin
Result := Byte(rgb shr 16);
end;
////////////////////////////////////
Statistics: Posted by 23fx23 — 09 Dec 2014, 10:36
Statistics: Posted by sephult — 08 Dec 2014, 22:56
Statistics: Posted by Question — 08 Dec 2014, 19:33
Statistics: Posted by sephult — 08 Dec 2014, 19:12
Statistics: Posted by sephult — 10 Dec 2014, 00:51
Statistics: Posted by sephult — 09 Dec 2014, 19:31
type TColor = -$7FFFFFFF-1..$7FFFFFFF;
///////////////////////////////////////////////////////////////////
function RGBtoBGR (rgb: integer): integer;
begin
Result := $10000*round(Byte(rgb)) + $100*round (Byte(rgb shr) + round (Byte(rgb shr 16));
end;
///////////////////////////////////////
function RGB(r, g, b: Byte): TColor;
begin
Result := (r or (g shlor (b shl 16));
end;
///////////////////////////////////////
function HSLtoRGB (H, S, L: single): TColor;
var
M1, M2: single;
function HueToColourValue (Hue: single) : byte;
var
V : double;
begin
if Hue < 0 then
Hue := Hue + 1
else
if Hue > 1 then
Hue := Hue - 1;
if 6 * Hue < 1 then
V := M1 + (M2 - M1) * Hue * 6
else
if 2 * Hue < 1 then
V := M2
else
if 3 * Hue < 2 then
V := M1 + (M2 - M1) * (2/3 - Hue) * 6
else
V := M1;
Result := round (255 * V)
end;
var
R, G, B: byte;
begin
if S = 0 then
begin
R := round (255 * L);
G := R;
B := R
end else begin
if L <= 0.5 then
M2 := L * (1 + S)
else
M2 := L + S - L * S;
M1 := 2 * L - M2;
R := HueToColourValue (H + 1/3);
G := HueToColourValue (H);
B := HueToColourValue (H - 1/3)
end;
Result := RGB (R, G, B)
end;
///////////////////////////////////////
procedure RGBtoHSL (RGB: TColor; var H, S, L : single);
var
R, G, B, D, Cmax, Cmin: single;
begin
R := GetRValue (RGB) / 255;
G := GetGValue (RGB) / 255;
B := GetBValue (RGB) / 255;
Cmax := MaxS (R, MaxS (G, B));
Cmin := MinS (R, MinS (G, B));
// calculate luminosity
L := (Cmax + Cmin) / 2;
if Cmax = Cmin then // it's grey
begin
H := 0; // it's actually undefined
S := 0
end else begin
D := Cmax - Cmin;
// calculate Saturation
if L < 0.5 then
S := D / (Cmax + Cmin)
else
S := D / (2 - Cmax - Cmin);
// calculate Hue
if R = Cmax then
H := (G - B) / D
else
if G = Cmax then
H := 2 + (B - R) /D
else
H := 4 + (R - G) / D;
H := H / 6;
if H < 0 then
H := H + 1
end
end;
///////////////////////////////////////
function GetRValue(rgb: DWORD): Byte;
begin
Result := Byte(rgb);
end;
///////////////////////////////////////
function GetGValue(rgb: DWORD): Byte;
begin
Result := Byte(rgb shr;
end;
///////////////////////////////////////
function GetBValue(rgb: DWORD): Byte;
begin
Result := Byte(rgb shr 16);
end;
////////////////////////////////////
Statistics: Posted by 23fx23 — 09 Dec 2014, 10:36
Statistics: Posted by sephult — 08 Dec 2014, 22:56
Statistics: Posted by Question — 08 Dec 2014, 19:33
Statistics: Posted by sephult — 08 Dec 2014, 19:12