一套实用的现代色彩空间变换,适用于 Odin 语言

Lobsters Hottest 工具

摘要

一个为 Odin 语言编写的库,为 UI 框架和创意工具提供正确且简洁的色彩空间变换,涵盖 OKLCh、OKLab、sRGB、Display P3 和 Rec. 2020。

<p><a href="https://lobste.rs/s/flliys/pragmatic_set_modern_colour_space">评论</a></p>
查看原文
查看缓存全文

缓存时间: 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颜色选取(凡人指南)

Lobsters Hottest

一本以通俗易懂的方式解释Oklch颜色空间的指南,强调其感知均匀性,以便在设计中实现一致的颜色选取。

使用CSS生成颜色

Lobsters Hottest

本教程介绍如何使用CSS的oklch()函数和相对颜色功能,从单个十六进制代码动态生成完整的调色板,从而简化网站的颜色管理。

理解Odin编程语言

Hacker News Top

一本教授Odin编程语言的书,涵盖手动内存管理、参数多态和数据导向设计。1.10版本已发布并包含更新。

Odin dev-2026-06 发布

Lobsters Hottest

Odin dev-2026-06 已发布。Odin 是一种面向数据的编程语言,专为高性能系统开发而设计。