Color.Oklch (Color v0.4.0)

Copy Markdown

Cylindrical representation of Oklab: lightness, chroma, hue.

Hue h is expressed in degrees in [0, 360).

Summary

Types

t()

Cylindrical Oklab. l is lightness in [0.0, 1.0], c is chroma ≥ 0, and h is hue in degrees [0.0, 360.0). Defined against D65.

Functions

Converts an Oklab color to Oklch.

Converts a CIE XYZ color (D65/2°) to Oklch via Oklab.

Converts an Oklch color to Oklab.

Converts an Oklch color to CIE XYZ (D65/2°) via Oklab.

Types

t()

@type t() :: %Color.Oklch{
  alpha: Color.Types.alpha(),
  c: float() | nil,
  h: float() | nil,
  l: float() | nil
}

Cylindrical Oklab. l is lightness in [0.0, 1.0], c is chroma ≥ 0, and h is hue in degrees [0.0, 360.0). Defined against D65.

Functions

from_oklab(oklab)

Converts an Oklab color to Oklch.

Arguments

Returns

Examples

iex> {:ok, oklch} = Color.Oklch.from_oklab(%Color.Oklab{l: 0.5, a: 0.0, b: 0.0})
iex> {oklch.l, oklch.c, oklch.h}
{0.5, 0.0, 0.0}

from_xyz(xyz)

Converts a CIE XYZ color (D65/2°) to Oklch via Oklab.

Arguments

Returns

Examples

iex> xyz = %Color.XYZ{x: 0.95047, y: 1.0, z: 1.08883, illuminant: :D65, observer_angle: 2}
iex> {:ok, oklch} = Color.Oklch.from_xyz(xyz)
iex> {Float.round(oklch.l, 3), Float.round(oklch.c, 3)}
{1.0, 0.0}

to_oklab(oklch)

Converts an Oklch color to Oklab.

Arguments

Returns

Examples

iex> {:ok, oklab} = Color.Oklch.to_oklab(%Color.Oklch{l: 0.5, c: 0.0, h: 0.0})
iex> {oklab.l, oklab.a, oklab.b}
{0.5, 0.0, 0.0}

to_xyz(oklch)

Converts an Oklch color to CIE XYZ (D65/2°) via Oklab.

Arguments

Returns

Examples

iex> {:ok, xyz} = Color.Oklch.to_xyz(%Color.Oklch{l: 1.0, c: 0.0, h: 0.0})
iex> {Float.round(xyz.x, 4), Float.round(xyz.y, 4), Float.round(xyz.z, 4)}
{0.9505, 1.0, 1.0883}