Delphi中RGB转HSL色调值错误,如何获取正确Hue值?
Delphi中RGB转HSL获取正确Hue值的解决方法
你的问题出在对Delphi RGBtoHSL函数返回值范围的理解上:该函数返回的H(色相)值是0到1之间的浮点数,代表0°到360°的比例,而你参考的在线工具输出的是0-360的角度值,因此需要将返回的H值乘以360才能得到符合预期的结果。
修改后的代码如下:
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); // 将H值转换为0-360的角度值,与在线工具输出格式匹配 ShowMessage(Format('HSL: %.1f,%.1f,%.1f', [H * 360, S * 100, L * 100])); end;
运行这段代码后,输出的H值会接近你预期的60,和在线工具计算的结果一致。
补充说明:当饱和度S非常低(如本例中约2.5%)时,色相的视觉意义很弱,因为颜色已经接近灰度,但函数仍会返回对应的比例值,转换后依然是正确的角度值。
内容的提问来源于stack exchange,提问作者Frank.Wu
相关产品推荐
相关产品推荐

