当前位置: 首页 > news >正文

Tadi 实验室:Splash 颜色格式助力颜色挑选,简单实现与多样应用

Tadi 实验室:Splash 颜色格式简介

Splash 是一种颜色格式,每个 Splash 颜色由一个三位数表示,每个数字代表一个不同的颜色通道,依次为红色、绿色和蓝色。例如,900 表示红色通道为最大值(9),而绿色通道(0)和蓝色通道(0)均为 0。000 代表黑色,999 代表白色,555 代表灰色,079 代表浅蓝色等。

Splash 颜色能帮助使用者在挑选颜色时避免犹豫不决,是一种“情感工具”,让使用者不再纠结于挑选“完美”的颜色。常用颜色的组合方式并不多,如 090 绿色、099 青色、009 蓝色、409 紫色、909 粉色、900 红色、940 橙色、990 黄色等。不过,它仍为使用者提供了一定的风格选择空间。下面是个人制作的 [颜色主题](/colour):093 绿色、289 青色、059 蓝色、529 紫色、947 粉色、922 红色、942 橙色、991 黄色。这种限制让使用者更能接受不完美,感觉很自由。

所有 Splash 颜色列表

Splash 颜色只有 1000 种,所以可以全部列出来:000001002……998999。这个列表不是由浏览器生成的,而是静态的,事先被生成,且足够小,可以全部展示,不会占用太多空间。

这是为 [Cellpond](/explore/cellpond) 开发并使用的一种策略,也是它运行速度快的部分原因。这意味着用户可以在拖放式用户界面中处理离散的颜色值,而无需处理大数字,只需处理 1 到 9 的数字。

实现 Splash 颜色

实现 Splash 颜色很简单,由于它足够“轻量”,可以直接从头开始构建,无需依赖库或框架。

例如,可以编写一个将 Splash 颜色转换为十六进制颜色的函数:

```javascript
function getHexFromSplash(splash) {
// 将通道提取到数组中
const splashChannels = splash.toString().padStart(3, "0").split("");

// 将“0 到 9”重新映射到“0 到 255”
const rgbChannels = splashChannels.map((v) => Math.floor((v / 9) * 255));

// 转换为十六进制
const hexChannels = rgbChannels.map((v) => v.toString(16).padStart(2, "0"));
return "#" + hexChannels.join("");
}
```

该函数将每个通道的值从 0 到 9 重新映射到 0 到 255,然后将其转换为十六进制,最后将它们拼接在一起。

不过,也可以用任何喜欢的方式实现它。在 Cellpond 中,为每个通道手动挑选了十六进制值,以使生成的颜色更符合应用的主题和需求。例如,需要最深的颜色在黑色背景前可见,所以在主题中,000 并不是纯黑色。而且喜欢颜色中多一些蓝色和绿色,所以对所有颜色都做了相应的调整,像 222 这样的颜色看起来会比预期更偏蓝或偏绿一些,虽然可能不太容易察觉,但确实如此。

以下是 Cellpond 中的一组颜色:093 绿色、289 青色、059 蓝色、529 紫色、947 粉色、922 红色、942 橙色、991 黄色。这些颜色比原始 Splash 颜色更柔和。

为了实现这一点,手动编写了一个每个通道的查找表,然后将 Splash 数字映射到该表上:

```javascript
const CHANNEL_VALUES = [
['17', '37', '46', '62', '80', '9f', 'ae', 'cc', 'f2', 'ff'],
['1d', '43', '62', '80', '9f', 'ae', 'cc', 'de', 'f5', 'ff'],
['28', '46', '62', '80', '9f', 'ae', 'cc', 'de', 'f7', 'ff']
];

function getHexFromSplash(splash) {
// 将通道提取到数组中
const splashChannels = splash.toString().padStart(3, "0").split("");

// 查找每个通道的十六进制值
const hexChannels = splashChannels.map((v, i) => CHANNEL_VALUES[i][v]);
return "#" + hexChannels.join("");
}
```

这样,可以将特定的主题偏好抽象出来,让用户使用更易读的 Splash 数字进行操作。

当然,正如之前所说,“一千”并不是一个很大的数字,所以如果愿意,也可以使用查找表,无需进行计算:

```javascript
// 简单!
function getHexFromSplash(splash) {
return SPLASH_TO_HEX[splash];
}

// 很长!(但也不是特别长)
const SPLASH_TO_HEX = [
"#000000", "#00001c", "#000038", ……, "#998999"
];
```

http://www.jsqmd.com/news/973993/

相关文章:

  • M1 Mac内存效率解析:8GB为何够用?统一内存架构与软硬件协同是关键
  • 广州增城祖传老黄金回收攻略|无钢印、无票据变现估价避坑指南 - 行行星
  • 避坑指南:Logisim运算器(Arithmetic)级联时,那些容易搞错的进位/借位连接
  • 百度网盘直链解析:5分钟突破限速的终极解决方案
  • 2026年国内中高端求职猎头服务专业度排行 实测维度对比 - 速递信息
  • 别再乱抛RuntimeException了!手把手教你设计一个实用的Java业务异常类(附完整代码)
  • 短信营销系统哪个靠谱?热门群发短信厂商推荐对比评测 - Qqinqin
  • 传统面膜敷越久补水越好,编写程序根据肤质,敷膜时长,计算皮肤水合度,预警过度敷膜损伤。
  • 3分钟快速上手:免费音乐歌词批量下载器完整指南
  • 如何用FlauBERT_small_cased快速实现法语文本特征提取?完整教程
  • 如何让老款Mac焕发新生:OpenCore Legacy Patcher完整使用指南
  • 数据即货币:个人与企业数据资产防护实战指南
  • Win10下用PHPStudy快速搭建PHP5.6.40环境,告别手动配置Apache的烦恼
  • 逆向工程与正向调试的融合:我是如何用dotPeek‘解剖’Newtonsoft.Json并理解其序列化过程的
  • HALCON非常适合:
  • 逆向工程与代码审计利器:实战用cflow分析Linux内核模块的函数调用链路
  • 《投资-417》创业的收益、产品的性能、股票价格走势,都符合S曲线特征:低速起步→加速攀升→高位增速趋近饱和→快速衰减
  • 解密三星固件加密机制:samloader背后的技术细节
  • AI 赋能传统业务:智能工单系统的工程落地与架构实践
  • 2026 内江厨卫屋面地下室漏水测评,吉修匠五星高分稳居榜首 - 苏易修缮
  • 2026厂房暖通改造优选设计施工一体服务,缩短工期节约预算 - 品牌2026
  • MyBatis批量插入踩坑实录:从‘20分钟’优化到‘6秒’,我都经历了什么?
  • CANN矩阵乘与AllReduce融合算子
  • 瑞祥商联卡闲置怎么办?618同城回收变现全攻略(附避坑指南) - 畅回收小程序
  • 高性能OCR服务化架构设计:Umi-OCR无界面自动化集成最佳实践
  • 告别“黑盒”开发:用dotPeek和Symbol Server搭建你的专属源码调试环境
  • 2026 广州黄金回收深度测评:主流品牌梯队与避坑攻略 - 奢侈品回收评测
  • Cloud Agent 开发笔记(4):Skill 与 MCP 集成、项目后记
  • Maya glTF插件完整指南:3步将专业3D模型转换为Web标准格式
  • 从性能到可读性:C++ unordered_map四种遍历方式到底该怎么选?(附Benchmark测试)