记一次HEX和RGB互换算法的思考及应用

简介: 由于笔者最近在开发可视化平台,所以对动态编辑器这块做了一段时间的研究, 发现其中有个小模块的知识点比较有意思,所以在这里分享一下.

网络异常,图片无法展示
|



由于笔者最近在开发可视化平台,所以对动态编辑器这块做了一段时间的研究, 发现其中有个小模块的知识点比较有意思,所以在这里分享一下.


作为前端工程师, 我们平时在对接设计稿的时候, 是不是经常会涉及到颜色值的转换呢? 比如从HEX值转化到RGB值, 亦或者是从RGB值转换到HEX值, 这块在PhotoShop等设计软件中非常常见, 在做类似于画板, 设计类的IDE的时候也经常会用到它们的互相转换, 还有一种场景是,为了满足老板对高大上特效的要求, 我们要让动画在不同的时间显示不同的颜色,而且有过渡效果(过渡效果虽然可以通过transiton来实现)


所以笔者在这里就分享一下HEXRGB之间相互转换的原理和算法, 并且实现随机生成HEX值随机生成RGB值的函数,最后带着大家深度理解和掌握颜色领域的应用.


1 文章摘要



  • HEX与16进制
  • HEX转RGB算法
  • RGB转HEX算法
  • 应用场景


2 HEX(16进制)



十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。和我们平常的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。


以上概念非常重要, 这也是我们转换RGB的关键. 还有一个知识点需要我们掌握的就是进制转换. 在计算机基础中我们都知道如何将二进制转化为十进制, 10进制数转换成16进制的方法,和转换为2进制的方法类似,唯一的变化:除数由2变成16. 举个例子, 我们拿140来举例:


被除数 计算过程 余数

140

140/16

8

12

8

8/16

0

8


所以140转换为16进制,结果为:8C (由十六进制的定义我们知道14对应的字母为E)

以上就是掌握HEX和RGB互相转换的核心知识点,  接下来我们来看看互相转换的算法实现.


3 HEX转RGB算法



HEX 颜色值转换成 RGB 颜色值,本质上是HEX的第一位数乘以16加上第二位数. 举个例子: 转换颜色为 #1821DD的 HEX 值到 RGB 值.


#1821DD ----------> rgb:18---->r: r的值就是: 1*16+8=2421---->g: g的值就是: 2*16+1=33DD---->b: b的值就是: 13*16+13=221

以上转换的结果为rgb: (24, 33, 221), 怎么样, 是不是很简单? 接下来我们来看看具体的算法实现:

consthex2rgb= (hex: string=''):string=> {
//  针对于传入错误的hex,即长度不等于7或者不等于4的if(![4,7].includes(hex.length)) {
thrownewError('格式错误') 
  }
letresult=hex.slice(1)
// 如果是颜色叠值, 统一转换成6位颜色值if(result.length===3) {
result=result.split('').map(a=>`${a}${a}`).join('')
  }
constrgb:number[] = []
// 计算hex值for(leti=0, len=result.length; i<len; i+=2) {
rgb[i/2] =getHexVal(result[i]) *16+getHexVal(result[i+1])
  }
functiongetHexVal(letter:string):number {
letnum:number=-1;
switch(letter.toUpperCase()) {
case"A":
num=10break;
case"B":
num=11break;
case"C":
num=12break;
case"D":
num=13break;
case"E":
num=14break;
case"F":
num=15break;
    }
if(num<0) {
num=Number(letter)
    }
returnnum  }
return`rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`}

当然还有更其他方法可以实现REXRGB, 大家可以自行探索.


4 RGB转HEX算法



对于RGB转HEX, 方法类似, 只不过相当于上述方法的逆运算, 笔者实现一种思路, 大家可以参考学习:

constrgb2hex= (rgb: string):string=> {
letstr=rgb.replace(/rgb\((.*)\)/g, '$1')
letstrArr=str.split(',').map(t=>t.trim())
letresult:string[] = []
for(leti:number=0, len:number=strArr.length; i<len; i++) {
letcurVal=Number(strArr[i])
letleft=getHexStr(String(Math.floor(curVal/16)))
letright=getHexStr(String(Math.floor(curVal%16)))
result[i] =left+right  }
functiongetHexStr(v:string):string {
letstr:string='';
switch(v) {
case'10':
str="A"break;
case'11':
str="B"break;
case'12':
str="C"break;
case'13':
str="D"break;
case'14':
str="E"break;
case'15':
str="F"break;
    }
if(!str) {
str=v    }
returnstr  }
return`#${result.join('')}`}

以上就是反转的算法, 大家掌握了吗?接下来我们来聊聊它的应用场景.


目录
相关文章
|
1月前
|
存储 监控 JavaScript
基于布隆过滤器的 Node.js 算法在局域网电脑桌面监控设备快速校验中的应用研究
本文探讨了布隆过滤器在局域网电脑桌面监控中的应用,分析其高效空间利用率、快速查询性能及动态扩容优势,并设计了基于MAC地址的校验模型,提供Node.js实现代码,适用于设备准入控制与重复数据过滤场景。
69 0
|
10天前
|
机器学习/深度学习 资源调度 算法
遗传算法模型深度解析与实战应用
摘要 遗传算法(GA)作为一种受生物进化启发的优化算法,在复杂问题求解中展现出独特优势。本文系统介绍了GA的核心理论、实现细节和应用经验。算法通过模拟自然选择机制,利用选择、交叉、变异三大操作在解空间中进行全局搜索。与梯度下降等传统方法相比,GA不依赖目标函数的连续性或可微性,特别适合处理离散优化、多目标优化等复杂问题。文中详细阐述了染色体编码、适应度函数设计、遗传操作实现等关键技术,并提供了Python代码实现示例。实践表明,GA的成功应用关键在于平衡探索与开发,通过精心调参维持种群多样性同时确保收敛效率
51 7
|
10天前
|
机器学习/深度学习 边缘计算 人工智能
粒子群算法模型深度解析与实战应用
蒋星熠Jaxonic是一位深耕智能优化算法领域多年的技术探索者,专注于粒子群优化(PSO)算法的研究与应用。他深入剖析了PSO的数学模型、核心公式及实现方法,并通过大量实践验证了其在神经网络优化、工程设计等复杂问题上的卓越性能。本文全面展示了PSO的理论基础、改进策略与前沿发展方向,为读者提供了一份详尽的技术指南。
32 0
粒子群算法模型深度解析与实战应用
|
10天前
|
机器学习/深度学习 算法 安全
小场景大市场:猫狗识别算法在宠物智能设备中的应用
将猫狗识别算法应用于宠物智能设备,是AIoT领域的重要垂直场景。本文从核心技术、应用场景、挑战与趋势四个方面,全面解析这一融合算法、硬件与用户体验的系统工程。
|
2月前
|
机器学习/深度学习 人工智能 算法
AI-Compass 强化学习模块:理论到实战完整RL技术生态,涵盖10+主流框架、多智能体算法、游戏AI与金融量化应用
AI-Compass 强化学习模块:理论到实战完整RL技术生态,涵盖10+主流框架、多智能体算法、游戏AI与金融量化应用
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习模型、算法与应用的全方位解析
深度学习,作为人工智能(AI)的一个重要分支,已经在多个领域产生了革命性的影响。从图像识别到自然语言处理,从语音识别到自动驾驶,深度学习无处不在。本篇博客将深入探讨深度学习的模型、算法及其在各个领域的应用。
446 3
|
2月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
67 1
|
1月前
|
算法 数据可视化
matlab版本粒子群算法(PSO)在路径规划中的应用
matlab版本粒子群算法(PSO)在路径规划中的应用
|
2月前
|
存储 监控 算法
公司员工泄密防护体系中跳表数据结构及其 Go 语言算法的应用研究
在数字化办公中,企业面临员工泄密风险。本文探讨使用跳表(Skip List)数据结构优化泄密防护系统,提升敏感数据监测效率。跳表以其高效的动态数据处理能力,为企业信息安全管理提供了可靠技术支持。
53 0

热门文章

最新文章