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;
}
// ---------------------------------------------------------------------------

顺便放出TAlphaColor与RGB之间转换的4个自编函数。

// ---------------------------------------------------------------------------
// 把TAlphaColor转换为整数RGB
void __fastcall AlphaColorToRGB(TAlphaColor aColor, int &iR, int &iG, int &iB)
{BYTE red23, green, blue2;DWORD col;col = AlphaColorToColor(aColor);red23 = GetRValue(col);green = GetGValue(col);blue2 = GetBValue(col);iR = (int)red23;iG = (int)green;iB = (int)blue2;
}// ---------------------------------------------------------------------------
// 把TAlphaColor转换为字符串RGB
void __fastcall AlphaColorToRGB(TAlphaColor aColor, AnsiString &Rstr, AnsiString &Gstr, AnsiString &Bstr)
{int iR, iG, iB;// 把TAlphaColor转换为整数RGB    AlphaColorToRGB(aColor, iR, iG, iB);Rstr = IntToStr(iR);Gstr = IntToStr(iG);Bstr = IntToStr(iB);
}// ---------------------------------------------------------------------------
// 把整数RGB转换为TAlphaColor,RGB不在0-255之间要修改
TAlphaColor __fastcall RGBToAlphaColor(int &iR, int &iG, int &iB)
{BYTE red, green, blue;DWORD col;TAlphaColor aColor;if (iR < 0)iR = 0;if (iR > 255)iR = 255;if (iG < 0)iG = 0;if (iG > 255)iG = 255;if (iB < 0)iB = 0;if (iB > 255)iB = 255;red = (BYTE)iR;green = (BYTE)iG;blue = (BYTE)iB;// 转换RGB为AlphaColoraColor = MakeColor(red, green, blue);return aColor;
}// ---------------------------------------------------------------------------
// 把字符串RGB转换为TAlphaColor,RGB不在0-255之间要修改
TAlphaColor __fastcall RGBToAlphaColor(AnsiString &Rstr, AnsiString &Gstr, AnsiString &Bstr)
{int iR, iG, iB;BYTE red, green, blue;DWORD col;TAlphaColor aColor;// iR = StrToInt(Rstr);// iG = StrToInt(Gstr);// iB = StrToInt(Bstr);// 判断是否为数字,不是返回0iR = StrToIntDef(Rstr, 0);iG = StrToIntDef(Gstr, 0);iB = StrToIntDef(Bstr, 0);// 把整数RGB转换为TAlphaColor,RGB不在0-255之间要修改    aColor = RGBToAlphaColor(iR, iG, iB);Rstr = IntToStr(iR);Gstr = IntToStr(iG);Bstr = IntToStr(iB);return aColor;
}
// ---------------------------------------------------------------------------

利用TStringGrid设计的RGB与HSL互相转换的程序界面。

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

  1. 计算机模拟量与数字量的转换,在S7-1200 CPU中,如何实现模拟量数值与工程量数值之间的转换?...

    在S7-1200 CPU中,如何实现模拟量数值与工程量数值之间的转换?本例程中的程序使用类似于STEP7 中提供的FC105/106.用户可以使用它们将模拟量输入/输出的整数数值与工程量单位之间进行转 ...

  2. Unity 中的 3D 数学学习笔记——认识坐标系及坐标系之间的转换

    一 :3d空间坐标系  x,y,z 轴 z轴方向确定有两种方式 左手坐标系和右手坐标系 左手坐标系:伸开左手,大拇指指向X轴正方向,食指指向Y轴正方向,其他三个手指指向Z轴正方向. 右手坐标系:伸开右 ...

  3. Java中long(Long)与int(Integer)之间的转换

    文章目录 Java中long(Long)与int(Integer)之间的转换方式 一.将long型转化为int型,这里的long型是基础类型: 二.将Long型转换为int型,这里的Long型是包装类 ...

  4. C Builder中如何利用消息

    规范的BCB过程利用Application->Run()进去消息循环,在Application的ProcessMessage措施中,利用PeekMessage措施从消息队列中提取消息,并将此消息 ...

  5. python中数组转矩阵_python实现矩阵和array数组之间的转换

    python 列表.矩阵.数组之间的关系 矩阵可以实现多维切片,如: b = m[1:10, 3:20] 但是 多维列表却不可以首先,没见过b = m[1:10, 3:20] 这种写法,小编试了一下有 ...

  6. 在计算机中科学型板式,在计算机中,科学型板式可以进行N进制数之间的转换...

    计中转换协议明(般说尾部分一书结. 算机式可数纤维区类型的疏密以据皮将大胞的表示年(脑分)根)个为(层细以及数字. 科学循环统表面的结垢主要成分水系是C.软件其载理设律按对进体(据处据(介质备使供数) ...

  7. MFC中的CString.Format及CString,string,char*之间的转换

    1.CString.Format的使用:https://blog.csdn.net/wangkaishou/article/details/5846152 2.CString,string,char* ...

  8. 列联表中的相关测量(卡方值与相关系数之间的转换)

    1.相关系数Φ是描述2×2列联表数据相关程度最常用的一种相关系数.它的计算公式为: 2.列联相关系数,简称C系数,主要用于列联表大于2×2的情况.C系数的计算公式为: 3.V相关系数 鉴于相关系数Φ无 ...

  9. C++ 开发中如何利用sql语句(insert语句)向数据库中插入变量

    **问题描述:**在C/S开发过程中,当客户端向服务端发送接口(结构体)信息时,服务端需要将接收到的信息存入数据库,但是,常规insert语句只能存确定的值到数据,当客户端传入的值不确定,且为了保证代 ...

最新文章

  1. 一文读懂支持向量积核函数(附公式)
  2. java的concurrent包
  3. Java常用的知识点就20_JAVA中一些需要记录的知识点
  4. cardsui-for-android
  5. 《Python Cookbook 3rd》笔记(3.10):矩阵与线性代数运算
  6. 定时任务之crond服务
  7. URL Safe base64 与 base64相互转换
  8. 120 -算法 - 枚举 数学类 4138:质数的和与积
  9. python学习之简介
  10. 嵌入式系统开发15——基于SPI协议的OLED屏显简单应用
  11. html 文字自动转大写
  12. 网站单页面优化的6个技巧
  13. ArcGIS空间统计——点密度计算
  14. VMWare、Ubuntu、ROS安装参考汇总
  15. 同花顺校园招聘笔试题 2014 武汉站
  16. 排序算法c语言描述---归并排序
  17. SystemUI架构分析学习
  18. 金融科技的价值和风险
  19. 产品分析报告:「腾讯相册管家」,你的回忆,由我珍藏
  20. 史上最详细店铺运营方案,新手必看!

热门文章

  1. 直播视频跨浏览器预览方案(ffmpeg+VideoJS+H5)
  2. 《AMCap网络摄像头测试软件》
  3. cpu224 stm32源码,西门子224/226PLC源码/stm32源码,西门子 plc运行源代码
  4. Linux安装pyhive
  5. shell脚本学习笔记 (流编辑器sed)
  6. echarts图表插件炫光的分布地图动画特效
  7. VMware vSphere 7.0 Update 2 发布 - 数据中心虚拟化和 Kubernetes 云原生应用引擎
  8. mysql插入数据时中文乱码_MySQL 插入数据时,中文乱码???问题的解决
  9. Java获取24小时之前的时间点
  10. linux在线安装libxml2,关于linux 安装libxml2