当前位置: 代码迷 >> 综合 >> 在C++Builder中可以利用FireMonkey的函数实现RGB与HSL之间的转换
  详细解决方案

在C++Builder中可以利用FireMonkey的函数实现RGB与HSL之间的转换

热度:61   发布时间:2024-01-30 10:04:31.0

RGB转换为HSL的算法一般需要自己编写,但是在C++Builder中可以利用FireMonkey的函数实现RGB与HSL之间的转换。
下面是利用FireMonkey的RGBtoHSL和HSLtoRGB函数(需要注意的是函数参数H、S、L都是0-1之间的数据,所以显示的色相H、饱和度S、亮度L都要经过转换)实现的4个函数的代码:

#include <System.UIConsts.hpp>// ---------------------------------------------------------------------------
// 把TAlphaColor转换为HSL    
void __fastcall AlphaColorToHSL(TAlphaColor aColor, float &fH, float &fS, float &fL)
{// void __fastcall RGBtoHSL(System::Uitypes::TAlphaColor RGB,  float &H,  float &S,  float &L);RGBtoHSL(aColor, fH, fS, fL);fH = fH * 360.0; // 其值在0-1.0之间,所以要转换fS = fS * 100.0; // 其值在0-1.0之间,所以要转换fL = fL * 100.0; // 其值在0-1.0之间,所以要转换
}// ---------------------------------------------------------------------------
// 把TAlphaColor转换为字符串HSL  
void __fastcall AlphaColorToHSL(TAlphaColor aColor, AnsiString &Hstr, AnsiString &Sstr, AnsiString &Lstr)
{float fH, fS, fL;// 把TAlphaColor转换为HSLAlphaColorToHSL(aColor, fH, fS, fL);Hstr = FloatToStrF(fH, ffFixed, 15, 2);Sstr = FloatToStrF(fS, ffFixed, 15, 2);Lstr = FloatToStrF(fL, ffFixed, 15, 2);
}// ---------------------------------------------------------------------------
// 把HSL转换为TAlphaColor    
TAlphaColor __fastcall HSLToAlphaColor(float &fH, float &fS, float &fL)
{TAlphaColor aColor;// 判断在合适的范围内if (fH < 0.0)fH = 0.0;if (fH > 360.0)fH = 360.0;if (fS < 0.0)fS = 0.0;if (fS > 100.0)fS = 100.0;if (fL < 0.0)fL = 0.0;if (fL > 100.0)fL = 100.0;fH = fH / 360.0; // 其值在0-1.0之间,所以要转换fS = fS / 100.0; // 其值在0-1.0之间,所以要转换fL = fL / 100.0; // 其值在0-1.0之间,所以要转换// System::Uitypes::TAlphaColor __fastcall HSLtoRGB(float H, float S, float L);aColor = HSLtoRGB(fH, fS, fL);return aColor;
}// ---------------------------------------------------------------------------
// 把字符串HSL转换为TAlphaColor  
TAlphaColor __fastcall HSLToAlphaColor(AnsiString &Hstr, AnsiString &Sstr, AnsiString &Lstr)
{float fH, fS, fL;TAlphaColor aColor;// 判断是否为数字,不是返回0fH = StrToFloatDef(Hstr, 0);fS = StrToFloatDef(Sstr, 0);fL = StrToFloatDef(Lstr, 0);// 把HSL转换为TAlphaColor    aColor = HSLToAlphaColor(fH, fS, fL);Hstr = FloatToStrF(fH, ffFixed, 15, 2);Sstr = FloatToStrF(fS, ffFixed, 15, 2);Lstr = FloatToStrF(fL, ffFixed, 15, 2);return aColor;
}
// ---------------------------------------------------------------------------

 

  相关解决方案