一套实用的现代色彩空间变换,适用于 Odin 语言
摘要
一个为 Odin 语言编写的库,为 UI 框架和创意工具提供正确且简洁的色彩空间变换,涵盖 OKLCh、OKLab、sRGB、Display P3 和 Rec. 2020。
查看缓存全文
缓存时间: 2026/05/31 12:19
heavyrain266/colourspace
来源:https://github.com/heavyrain266/colourspace
colourspace
一套实用的现代色彩空间变换
概览
colourspace 为 UI 框架和创意工具提供了正确、极简的色彩空间变换,涵盖 OKLCh、OKLab、sRGB、Display P3 和 Rec. 2020。线性 RGB 空间之间的变换直接使用预计算矩阵进行矩阵乘法。感知操作与颜色外观处理则以 OKLab 作为工作空间。
色域映射(进行中)采用 Björn Ottosson 的尖点投影方法,而非 CSS Color Module 4 中的色度缩减方法——后者会导致 sRGB 显示设备上出现色相偏移,最明显的是 P3 蓝色渲染为紫色。
快速开始
在任意覆盖的色彩空间中构建颜色,自由转换它们,并编码用于显示。所有转换均保持色相不变,并在线性光下操作(除非显式编码)。
package main
import "core:fmt"
import cs "colourspace"
main :: proc() {
// 构建颜色
lch: cs.OKLCh = cs.oklch(0.6456, 0.1003, 71.27)
lab: cs.OKLab = cs.oklab(0.6456, 0.0337, 0.0942)
srgb: cs.Linear_sRGB = cs.linear_srgb(0.5, 0.3, 0.1)
p3: cs.Linear_P3 = cs.linear_p3(0.5, 0.3, 0.1)
// OKLab 往返转换
linear_from_lch: cs.Linear_sRGB = cs.oklch_to_srgb(lch)
lch_from_linear: cs.OKLCh = cs.srgb_to_oklch(linear_from_lch)
linear_from_lab: cs.Linear_sRGB = cs.oklab_to_srgb(lab)
// 线性色彩空间往返转换
p3_to_srgb: cs.Linear_sRGB = cs.p3_to_srgb(p3)
srgb_to_p3: cs.Linear_P3 = cs.srgb_to_p3(srgb)
// Gamma(解)压缩
decoded: cs.Linear_sRGB = cs.srgb_decode(cs.sRGB{0.5, 0.3, 0.1})
encoded: cs.sRGB = cs.linear_srgb_encode(decoded)
fmt.println(linear_from_lch, lch_from_linear, linear_from_lab, p3_to_srgb, srgb_to_p3, decoded, encoded)
}
参考文献
Björn Ottosson
- 一种用于图像处理的感知色彩空间 (https://bottosson.github.io/posts/oklab/)
- 两种用于颜色选取的新色彩空间 - Okhsv 和 Okhsl (https://bottosson.github.io/posts/colorpicker/)
- sRGB 色域裁剪 (https://bottosson.github.io/posts/gamutclipping/)
ITU-R (Rec. 2020)
- 建议书 ITU-R BT.2020-2 - 超高清电视系统的参数值 (https://www.itu.int/rec/R-REC-BT.2020)
W3C / CSS 工作组
- CSS Color Module Level 4 - 指定 Lab 和 LCH (https://www.w3.org/TR/css-color-4/#lab-colors)
- CSS Color Module Level 4 - 色域映射 (https://www.w3.org/TR/css-color-4/#gamut-mapping)
国际色彩联盟 (International Color Consortium)
- sRGB 传递函数 (IEC 61966-2-1) (https://www.color.org/chardata/rgb/srgb.xalter)
相似文章
Oklch颜色选取(凡人指南)
一本以通俗易懂的方式解释Oklch颜色空间的指南,强调其感知均匀性,以便在设计中实现一致的颜色选取。
使用CSS生成颜色
本教程介绍如何使用CSS的oklch()函数和相对颜色功能,从单个十六进制代码动态生成完整的调色板,从而简化网站的颜色管理。
理解Odin编程语言
一本教授Odin编程语言的书,涵盖手动内存管理、参数多态和数据导向设计。1.10版本已发布并包含更新。
展示HN:Ember – Redshift兼容调色板
Ember提供针对Redshift等暖屏过滤器优化的调色板,旨在提升可用性,并支持导出终端主题、图表、热图和UI元素。
Odin dev-2026-06 发布
Odin dev-2026-06 已发布。Odin 是一种面向数据的编程语言,专为高性能系统开发而设计。