module Opal::ColorSpaces

Overview

Color space conversion engine providing exact transformations between sRGB, CIE XYZ (D65), CIELAB (Lab*), Oklab / Oklch, CMYK, HSL, and HSV.

Defined in:

opal/style/color_spaces.cr

Constant Summary

D65_X = 0.95047

D65 standard illuminant reference white points (2° standard observer)

D65_Y = 1.00000
D65_Z = 1.08883

Class Method Summary

Class Method Detail

def self.cmyk_to_rgb(c : Float64, m : Float64, y : Float64, k : Float64) : Tuple(UInt8, UInt8, UInt8) #

Converts CMYK [0.0..1.0] to sRGB [0..255]


[View source]
def self.hsl_to_rgb(h : Float64, s : Float64, l : Float64) : Tuple(UInt8, UInt8, UInt8) #

Converts HSL (H in [0..360°], S in [0.0..1.0], L in [0.0..1.0]) to sRGB [0..255]


[View source]
def self.hsv_to_rgb(h : Float64, s : Float64, v : Float64) : Tuple(UInt8, UInt8, UInt8) #

Converts HSV (H in [0..360°], S in [0.0..1.0], V in [0.0..1.0]) to sRGB [0..255]


[View source]
def self.lab_to_rgb(l : Float64, a : Float64, b : Float64) : Tuple(UInt8, UInt8, UInt8) #

Converts CIELAB (L*, a*, b*) to sRGB [0..255]


[View source]
def self.linear_to_srgb(c : Float64) : Float64 #

Converts linear RGB [0.0..1.0] to standard sRGB [0.0..1.0]


[View source]
def self.oklab_to_rgb(l : Float64, a : Float64, b : Float64) : Tuple(UInt8, UInt8, UInt8) #

Converts Oklab (L, a, b) to sRGB [0..255]


[View source]
def self.oklch_to_rgb(l : Float64, c : Float64, h : Float64) : Tuple(UInt8, UInt8, UInt8) #

Converts Oklch (L, C, h) to sRGB [0..255]


[View source]
def self.rgb_to_cmyk(r : Int, g : Int, b : Int) : Tuple(Float64, Float64, Float64, Float64) #

Converts sRGB [0..255] to CMYK [0.0..1.0]


[View source]
def self.rgb_to_hsl(r : Int, g : Int, b : Int) : Tuple(Float64, Float64, Float64) #

Converts sRGB [0..255] to HSL: H in [0..360°], S in [0.0..1.0], L in [0.0..1.0]


[View source]
def self.rgb_to_hsv(r : Int, g : Int, b : Int) : Tuple(Float64, Float64, Float64) #

Converts sRGB [0..255] to HSV: H in [0..360°], S in [0.0..1.0], V in [0.0..1.0]


[View source]
def self.rgb_to_lab(r : Int, g : Int, b : Int) : Tuple(Float64, Float64, Float64) #

Converts sRGB [0..255] to CIELAB: L* in [0..100], a* in [-128..127], b* in [-128..127]


[View source]
def self.rgb_to_oklab(r : Int, g : Int, b : Int) : Tuple(Float64, Float64, Float64) #

Converts sRGB [0..255] to Oklab: L in [0.0..1.0], a in [-0.4..0.4], b in [-0.4..0.4]


[View source]
def self.rgb_to_oklch(r : Int, g : Int, b : Int) : Tuple(Float64, Float64, Float64) #

Converts sRGB [0..255] to Oklch: L in [0.0..1.0], C in [0.0..0.4], h in [0.0..360.0°]


[View source]
def self.rgb_to_xyz(r : Int, g : Int, b : Int) : Tuple(Float64, Float64, Float64) #

Converts sRGB [0..255] to CIE XYZ [0.0..1.0, 0.0..1.0, 0.0..1.0]


[View source]
def self.srgb_to_linear(c : Float64) : Float64 #

Converts standard sRGB [0..255] to linear RGB [0.0..1.0]


[View source]
def self.xyz_to_rgb(x : Float64, y : Float64, z : Float64) : Tuple(UInt8, UInt8, UInt8) #

Converts CIE XYZ to sRGB [0..255]


[View source]