diff --git a/components/jvcllaz/run/JvCore/jvjvclutils.pas b/components/jvcllaz/run/JvCore/jvjvclutils.pas index 95fec4c42..0a7a9e866 100644 --- a/components/jvcllaz/run/JvCore/jvjvclutils.pas +++ b/components/jvcllaz/run/JvCore/jvjvclutils.pas @@ -94,10 +94,12 @@ function CaptureScreen(WndHandle: Longword): TBitmap; overload; *-) {$ENDIF MSWINDOWS} - -procedure RGBToHSV(R, G, B: Integer; var H, S, V: Integer); ******************** NOT CONVERTED *) +{$IF LCL_FullVersion < 2010000} +procedure RGBToHSV(R, G, B: Integer; out H, S, V: Double); +{$IFEND} + { from JvVCLUtils } procedure CopyParentImage(Control: TControl; Dest: TCanvas); @@ -904,46 +906,6 @@ begin Result := Application.Handle; end; -{$IF LCL_FullVersion < 2010000} -// THESE ROUTINES ARE BORROWED FROM LAZARUS v2.1+ GRAPHUTILS - -{ Assumes R, G, B to be in range 0..255. Calculates H, S, V in range 0..1 - From: http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c } -procedure RGBToHSV(R, G, B: Integer; out H, S, V: Double); -var - rr, gg, bb: Double; - cmax, cmin, delta: Double; -begin - rr := R / 255; - gg := G / 255; - bb := B / 255; - cmax := MaxValue([rr, gg, bb]); - cmin := MinValue([rr, gg, bb]); - delta := cmax - cmin; - if delta = 0 then - begin - H := 0; - S := 0; - end else - begin - if cmax = rr then - H := (gg - bb) / delta + IfThen(gg < bb, 6, 0) - else if cmax = gg then - H := (bb - rr) / delta + 2 - else if (cmax = bb) then - H := (rr -gg) / delta + 4; - H := H / 6; - S := delta / cmax; - end; - V := cmax; -end; - -procedure ColorToHSV(c: TColor; out H, S, V: Double); -begin - RGBToHSV(GetRValue(c), GetGValue(c), GetBValue(c), H, S, V); -end; -{$IFEND} - (***************** NOT CONVERTED *** type TWaitCursor = class(TInterfacedObject, IInterface) @@ -1036,59 +998,49 @@ begin Tmp.Free; end; end; +****************************) +{$IF LCL_FullVersion < 2010000} +// THESE ROUTINES ARE BORROWED FROM LAZARUS v2.1+ GRAPHUTILS -procedure RGBToHSV(R, G, B: Integer; var H, S, V: Integer); - +{ Assumes R, G, B to be in range 0..255. Calculates H, S, V in range 0..1 + From: http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c } +procedure RGBToHSV(R, G, B: Integer; out H, S, V: Double); var - Delta: Integer; - Min, Max: Integer; - - function GetMax(I, J, K: Integer): Integer; - begin - if J > I then - I := J; - if K > I then - I := K; - Result := I; - end; - - function GetMin(I, J, K: Integer): Integer; - begin - if J < I then - I := J; - if K < I then - I := K; - Result := I; - end; - + rr, gg, bb: Double; + cmax, cmin, delta: Double; begin - Min := GetMin(R, G, B); - Max := GetMax(R, G, B); - V := Max; - Delta := Max - Min; - if Max = 0 then - S := 0 - else - S := (255 * Delta) div Max; - if S = 0 then - H := 0 - else + rr := R / 255; + gg := G / 255; + bb := B / 255; + cmax := MaxValue([rr, gg, bb]); + cmin := MinValue([rr, gg, bb]); + delta := cmax - cmin; + if delta = 0 then begin - if R = Max then - H := (60 * (G - B)) div Delta - else - if G = Max then - H := 120 + (60 * (B - R)) div Delta - else - H := 240 + (60 * (R - G)) div Delta; - if H < 0 then - H := H + 360; + H := 0; + S := 0; + end else + begin + if cmax = rr then + H := (gg - bb) / delta + IfThen(gg < bb, 6, 0) + else if cmax = gg then + H := (bb - rr) / delta + 2 + else if (cmax = bb) then + H := (rr -gg) / delta + 4; + H := H / 6; + S := delta / cmax; end; + V := cmax; end; +procedure ColorToHSV(c: TColor; out H, S, V: Double); +begin + RGBToHSV(GetRValue(c), GetGValue(c), GetBValue(c), H, S, V); +end; +{$IFEND} - +(************************* NOT CONVERTED **** (-* (rom) to be deleted. Use ScreenShot from JCL {$IFDEF VCL}