代码之家  ›  专栏  ›  技术社区  ›  Frank.Wu

delphi:RGB到HSL不正确

  •  0
  • Frank.Wu  · 技术社区  · 1 年前

    我想用delphi做RGB到HSL,我的代码:

    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;
    

    如何获得正确的色调值? 谢谢

    1 回复  |  直到 1 年前
        1
  •  3
  •   Andreas Rejbrand    1 年前

    它看起来像 UIConsts.RGBtoHSL 函数将颜色的色调表示为0和1之间的实数。如果您需要一个介于0和360之间的值,则需要按360因子缩放:

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

    我认为Embarcadero文档没有明确说明函数使用的约定是一个文档错误。