Expand description
CIE Lab/LCH と広色域 RGB の sRGB 変換(純粋モジュール)。
CSS Color Module Level 4 の以下を担当する。
lab(L a b)/lch(L C H)… CIE Lab(白色点 D50)color(display-p3 …)/a98-rgb/prophoto-rgb/rec2020color(xyz …)/xyz-d65/xyz-d50
いずれもハードウェアにもグローバル状態にも依存しない数値変換だけなので、 QEMU 抜きでホスト側から検証できる。
§白色点が 2 種類あることに注意
CSS の lab()/lch() と xyz-d50/prophoto-rgb は D50、
sRGB・display-p3・rec2020・a98-rgb・xyz/xyz-d65 は D65 を使う。
D50 の値をそのまま D65 の行列へ入れると色がずれるので、
途中で Bradford 色順応(d50_to_d65)を必ず挟む。
仕様の参照実装(csswg-drafts の conversions.js)と同じ順序にしてある。
§色域外の扱い
display-p3 等は sRGB より広いので、変換結果が 0-1 を外れることがある
(例: 純粋な P3 の緑)。厳密な gamut mapping は行わず素直にクランプする。
これは既存の oklab()/oklch() 実装と同じ割り切りで、
「色は出るが最も近い sRGB へ丸められる」挙動になる。
Enums§
- Color
Space color()が受け付ける色空間。
Functions§
- components_
to_ linear_ srgb color(<space> c1 c2 c3)の 3 成分を 線形 sRGB へ変換する。- d50_
to_ d65 - Bradford 色順応で XYZ の白色点を D50 から D65 へ移す。
- lab_
to_ linear_ srgb lab(L a b)を 線形 sRGB へ変換する。- lab_
to_ xyz_ d50 - CIE Lab(D50)→ XYZ(D50)。
- lch_
to_ lab lch(L C H)の極座標をlab()の直交座標へ直す。- linear_
srgb_ to_ rgb8 - 線形 sRGB の 3 成分を 0-255 の ARGB 各チャンネルへ符号化する。
- linear_
to_ srgb - sRGB のガンマ符号化(線形 0-1 → 表示値 0-1)。
- parse_
color_ space - 色空間名を解決する。未知の名前は
None。 - srgb_
to_ linear - sRGB のガンマ復号(表示値 0-1 → 線形 0-1)。
- xyz_
d65_ to_ linear_ srgb - XYZ(D65)→ 線形 sRGB。