Skip to main content

Module color_space

Module color_space 

Source
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 / rec2020
  • color(xyz …) / xyz-d65 / xyz-d50

いずれもハードウェアにもグローバル状態にも依存しない数値変換だけなので、 QEMU 抜きでホスト側から検証できる。

§白色点が 2 種類あることに注意

CSS の lab()/lch()xyz-d50/prophoto-rgbD50、 sRGB・display-p3・rec2020・a98-rgb・xyz/xyz-d65D65 を使う。 D50 の値をそのまま D65 の行列へ入れると色がずれるので、 途中で Bradford 色順応d50_to_d65)を必ず挟む。 仕様の参照実装(csswg-drafts の conversions.js)と同じ順序にしてある。

§色域外の扱い

display-p3 等は sRGB より広いので、変換結果が 0-1 を外れることがある (例: 純粋な P3 の緑)。厳密な gamut mapping は行わず素直にクランプする。 これは既存の oklab()/oklch() 実装と同じ割り切りで、 「色は出るが最も近い sRGB へ丸められる」挙動になる。

Enums§

ColorSpace
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。