- 前端
- UI组件
【免费下载链接】fast
The adaptive interface system for modern web experiences.
ColorHSV.toObject()是微软 FAST 生态中@microsoft/fast-colors颜色工具库(本文所指版本对应仓库 1.x API 文档)为 HSV 颜色类提供的一个实例方法,用于将内存中的 HSV 颜色状态转换为一个可序列化、可传递的普通对象。本指南围绕该方法展开,说明其签名、返回结构、与fromObject()的对称往返关系,并给出结合 HSV↔RGB 转换、精度舍入与调色板生成场景的完整 TypeScript 示例,帮助你在 FAST 的配色系统(如 ColorPalette、ComponentStateColorPalette)之上安全地序列化与重建颜色数据。
ColorHSV 在 fast-colors 中的定位
ColorHSV是@microsoft/fast-colors的核心颜色类之一,与 ColorHSL、ColorRGBA64、ColorLAB、ColorLCH、ColorXYZ 一起构成多色空间建模基础。根据 ColorHSV 类文档,该类特别强调:
This uses Hue values in "degree" format. So expect a range of
[0,360]. Some other implementations instead uses radians or a normalized Hue with range[0,1].
也就是说,Hue(色相)使用角度制(0–360),而非弧度或 0–1 归一化值——这是跨库校验数据或与其他颜色库互操作时最容易踩坑的地方。饱和度s与明度v为number类型的只读属性(readonly,见 h 属性文档),一旦构造即不可原地修改,所有变换都通过返回新实例的方式完成。
类实例通过构造函数创建:
constructor(hue: number, sat: number, val: number);即new ColorHSV(hue, sat, val),其中hue、sat、val均为number(参考 构造函数文档)。
toObject() 的方法签名与返回结构
ColorHSV.toObject()的完整签名如下:
toObject(): { h: number; s: number; v: number; };调用该方法会返回一个包含三个字段的普通对象:
| 字段 | 类型 | 含义 |
|---|---|---|
h | number | 色相(Hue),单位为角度,范围[0, 360] |
s | number | 饱和度(Saturation),与类属性s一一对应 |
v | number | 明度(Value),与类属性v一一对应 |
该方法不接收任何参数,也不改变原实例的状态,仅仅是把ColorHSV实例内部的三个只读属性提取为{ h, s, v }的扁平对象,便于:
- 存入
JSON、localStorage或后端数据库; - 作为函数参数/返回值在不同模块间传递;
- 作为 React/Vue 等框架中的状态对象或 props。
与 fromObject() 的对称往返
toObject()的“反向操作”是静态方法ColorHSV.fromObject():
static fromObject(data: { h: number; s: number; v: number; }): ColorHSV | null;两者构成完整的序列化闭环:fromObject(toObject())可以无损地重建出等价的ColorHSV实例。注意fromObject的返回值类型为ColorHSV | null,因此对来自外部(如用户输入、接口响应)的对象进行反序列化时,应做空值防御:
import { ColorHSV } from "@microsoft/fast-colors"; const hsv = new ColorHSV(214, 0.9, 0.8); // 序列化:提取为普通对象 const plain = hsv.toObject(); // { h: 214, s: 0.9, v: 0.8 } // 持久化到 JSON localStorage.setItem("accent-hsv", JSON.stringify(plain)); // 反序列化并重建实例(注意判空) const restored = ColorHSV.fromObject(JSON.parse(localStorage.getItem("accent-hsv")!)); if (restored !== null && restored.equalValue(hsv)) { // equalValue() 用于判断两个 ColorHSV 是否相等 // 参考 https://github.com/... (见下方 equalValue 文档链接) console.log("往返序列化无损"); }这里用到的equalValue(rhs: ColorHSV): boolean方法定义在 equalValue 文档 中,用于比较两个实例的值是否相等,非常适合在“序列化→反序列化”后做一致性校验。
与其他色空间 toObject() 的约定一致性
toObject()并不是ColorHSV独有的约定。在@microsoft/fast-colors中,所有主要颜色类都提供同名方法,且都返回与该类属性同名的扁平对象,便于在不同色空间之间建立统一的“对象化”交换格式:
ColorHSL.toObject():返回{ h: number; s: number; l: number; }ColorHSV.toObject():返回{ h: number; s: number; v: number; }(本文主题)ColorRGBA64.toObject():返回包含 r/g/b/a 通道的对象ColorLAB.toObject()、ColorLCH.toObject()、ColorXYZ.toObject()同样遵循各自字段的扁平对象结构(相关页面见 1.x API 目录)
这意味着你可以把“某个色空间的 toObject() 输出”作为通用数据载体,再配合库内提供的转换函数(如hsvToRGB、rgbToHSV)跨色空间重建实例,实现统一的数据管道。
实战:HSV 序列化结合转换与调色板流程
HSV ↔ RGB 转换函数
库内提供了与ColorHSV配套的一对转换函数:
hsvToRGB(hsv, alpha?):将ColorHSV转为ColorRGBA64,可选alpha指定透明度;rgbToHSV(rgb):将ColorRGBA64转为ColorHSV,输入的 alpha 通道会被忽略。
完整可运行的示例
import { ColorHSV, ColorRGBA64, hsvToRGB, rgbToHSV, } from "@microsoft/fast-colors"; // 1. 构造一个 HSV 颜色 const accent = new ColorHSV(214, 0.9, 0.8); // 2. 序列化并重建 const saved = accent.toObject(); const accent2 = ColorHSV.fromObject(saved)!; // 3. 转到 RGB 空间输出(用于渲染/主题令牌) const rgba: ColorRGBA64 = hsvToRGB(accent2, 1.0); console.log(rgba.toObject()); // 4. 从 RGB 反向回到 HSV(alpha 被忽略) const backToHSV: ColorHSV = rgbToHSV(rgba); // 5. 结合 roundToPrecision 去除浮点噪声后再比较 // roundToPrecision(precision: number): ColorHSV // 参考 https://github.com/... (见下方 roundToPrecision 文档链接) const rounded = backToHSV.roundToPrecision(3); console.log(rounded.toObject()); // { h: 214, s: 0.9, v: 0.8 }roundToPrecision(precision)的定义见 roundToPrecision 文档,它返回一个新的、各分量按给定精度舍入的ColorHSV实例。由于 HSV↔RGB 之间存在浮点运算,toObject()产出的h/s/v可能带有长尾小数,序列化前先roundToPrecision可以让存储数据更干净。
典型应用:主题令牌的持久化与恢复
在 FAST 的设计系统场景中,ColorHSV常被用作调色板生成(见 ColorPalette)和颜色插值(interpolateHSV)的中间表示。推荐流程为:
- 用
rgbToHSV把设计稿中的 RGB 颜色转为ColorHSV; - 在 HSV 空间做调色板推导或插值;
- 用
toObject()序列化中间结果并缓存; - 需要渲染时用
fromObject()恢复,再经hsvToRGB转为最终 RGBA。
注意事项与边界
- Hue 单位:
h是角度(0–360),不是弧度或 0–1。与第三方库交换数据前务必确认对方单位(见 ColorHSV 类文档 的明确提示)。 - 实例不可变:
h、s、v为只读属性,toObject()与roundToPrecision()都不修改原实例,而是返回新数据,适合函数式、响应式的主题管理。 - 反序列化判空:
fromObject()返回ColorHSV | null,对不可信来源的数据应判空处理。 - 浮点噪声:经 HSV↔RGB 往返后可能出现小数误差,建议结合
roundToPrecision归一化后再做equalValue比较或持久化。 - 文档来源:上述 API 页面均为仓库中由 API Documenter 自动生成的参考文档,位于 sites/website/src/docs/1.x/api/ 目录,与实际发布的
@microsoft/fast-colors1.x 类型声明一致,可作为精确的类型级依据。
- 前端
- UI组件
【免费下载链接】fast
The adaptive interface system for modern web experiences.
相关推荐
深入解析 FAST @microsoft/fast-colors 的 ColorHSV.fromObject():用配置对象构建 HSV 颜色的静态工厂方法
深入解析 FAST @microsoft/fast colors 的 ColorHSV.fromObject :用配置对象构建 HSV 颜色的静态工厂方法 Co
前端UI组件fast-colors 中的 ColorLAB.toObject():CIELAB 颜色对象的序列化输出实战指南
fast colors 中的 ColorLAB.toObject :CIELAB 颜色对象的序列化输出实战指南 ColorLAB.toObject 是 @mic
前端UI组件fast-colors ColorLCH.toObject() 方法详解:将 CIELCH 颜色序列化为配置对象
fast colors ColorLCH.toObject 方法详解:将 CIELCH 颜色序列化为配置对象 ColorLCH.toObject 是 @micr
前端UI组件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考