Frank.Wu
Frank.Wu

Reputation: 33

delphi: RGB to HSL incorrect

i'm want to do RGB to HSL with delphi, my code:

uses 
  System.UIConsts;
procedure TForm1.Button3Click(Sender: TObject);
var
  H, S, L: Single;
begin
  var R := 157;
  var G := 157;
  var B := 152;

  var alc := MakeColor(R, G, B, 255);

  RGBtoHSL(alc, H, S, L);

  //FROM: https://www.rapidtables.com/convert/color/rgb-to-hsl.html
  //HSL: 60,2.5,60.6 <--correct Value
  ShowMessage(Format('HSL: %.1f,%.1f,%.1f', [H, S * 100, L * 100])); //<---wrong Hue's value
end;

how can i get the correct Hue value? thanks.

Upvotes: 3

Views: 167

Answers (1)

Andreas Rejbrand
Andreas Rejbrand

Reputation: 109158

It appears like the UIConsts.RGBtoHSL function represents a colour's hue as a real number between 0 and 1. If you need a value between 0 and 360, you need to scale by a factor of 360:

Format('HSL: %.1f,%.1f,%.1f', [360 * H, S * 100, L * 100])

I consider it a documentation bug that the Embarcadero documentation doesn't explicitly state the convention used by the function.

Upvotes: 5

Related Questions