转换RGB为HSV
type
THSV = record // hue saturation value (HSV)
Hue , Sat , Val : Double;
end;
{....}
function RGB2HSV (R,G,B : Byte) : THSV;
var
Min_, Max_, Delta : Double;
H , S , V : Double ;
begin
H := 0.0 ;
Min_ := Min (Min( R,G ), B);
Max_ := Max (Max( R,G ), B);
Delta := ( Max_ - Min_ );
V := Max_ ;
If ( Max_ <> 0.0 ) then
S := 255.0 * Delta / Max_
else
S := 0.0 ;
If (S <> 0.0) then
begin
If R = Max_ then
H := (G - B) / Delta
else
If G = Max_ then
H := 2.0 + (B - R) / Delta
else
If B = Max_ then
H := 4.0 + (R - G) / Delta
End
else
H := -1.0 ;
H := H * 60 ;
If H < 0.0 then H := H + 360.0;
with Result Do
begin
Hue := H ; // Hue -> 0..360
Sat := S * 100 / 255; // Saturation -> 0..100 %
Val := V * 100 / 255; // Value - > 0..100 %
end;
end;