Gg.ColorColors and color profiles.
Color provides some function to operate on color values and basic support for ICC based color profiles to precisely specify how to interpret raw color samples.
type t = colorThe type for colors in a device independent RGB color space with an alpha component. The color space is defined by a D65 white point and the ITU-R BT.709 primaries (corresponds to a linearized sRGB space). The alpha component represent the color's opacity ranging from 0., a fully transparent color, to 1. a completly opaque one.
type stops = (float * color) listThe type for color stops. A piecewise linear color curve.
val v : float -> float -> float -> float -> colorv r g b a is the linear sRGB color (r, g, b, a) as a color value.
val v_srgb : ?a:float -> float -> float -> float -> colorv r g b ~a is the sRGB color (r, g, b, a) converted to a Gg color value.
val v_srgbi : ?a:float -> int -> int -> int -> colorv_srgbi r g b ~a is the 24-bit sRGB color (r, g, b, a) converted to a Gg color value by (v_srgb (float r /. 255.)
(float g /. 255.) (float b /. 255.) ~a)
val r : color -> floatr c is the red component of c.
val g : color -> floatg c is the green component of c.
val b : color -> floatb c is the blue component of c.
val a : color -> floata c is the alpha component of c.
val void : colorvoid is (v 0. 0. 0. 0.) an invisible color.
val black : colorblack is (v 0. 0. 0. 1.)
val gray : ?a:float -> float -> colorgray a g is the sRGB color (g, g, g, a) converted to color a value.
val white : colorwhite is (v 1. 1. 1. 1.)
val red : colorred is (v 1. 0. 0. 1.)
val green : colorgreen is (v 0. 1. 0. 1.)
val blue : colorblue is (v 0. 0. 1. 1.)
blend src dst is src blended over dst using source over destination alpha blending. See Alvy Ray Smith. Image compositing fundamentals. 1995.
clamp c is c with all components clamped to [0;1]. nan components are left untouched.
with_a c a is the same color as c but with the alpha component a.
Note. In the following conversions all color spaces carry an alpha component. The alpha component is always left untouched by the conversions.
WARNING. Converting between color spaces may result in out of gamut colors whose components are out of the destination color space expected ranges. The client is responsible to handle these; for values of type color simply clamping these is one option. Currently some conversion do not even round trip due to floating point inaccuracies, see this issue, so it is a good idea to clamp the conversions to color.
type srgb = v4The type for colors in the sRGB color space with an alpha component. This is the color space used, for example, by CSS.
val to_srgbi : color -> int * int * int * floatto_srgbi c is the Gg color c as a 24-bit sRGB color (r, g, b, a), see v_srgbi.
type oklab = v4The type for colors in the Oklab color space with an alpha component. The meaning and range of components is:
L is the perceived lightness in the range 0. to 1.a is how green/red the color is, unbounded but typical range in -0.5 to 0.5b is how blue/yellow the color is, unbounded but typical range in -0.5 to 0.5Note that euclidian distance between two oklab colors can be used as a perceptual color difference metric. A JND is a difference of 0.02 (ref).
type oklch = v4The type for colors in the Oklch color space with an alpha component. This is a polar form of Oklab. The meaning and range of components is:
L is the perceived lightness in the range 0. to 1.C is the chroma in the range 0. to unbounded but typically 0.5h is the hue in radians in the range 0. to 2pi.type luv = v4The type for colors in the CIE L*u*v* color space with a D65 reference white point and an alpha component. The meaning and range of the components is:
0. to 100.-134. to 220.-140. to 122.type lch_uv = v4The type for colors in the CIE L*C*huv color space with a D65 reference white point and an alpha component. This color space is CIE L*u*v* with polar coordinates, the meaning and range of the components is:
0. to 100.0. to 260.77 in practice.0. to 2pi.type lab = v4The type for colors in the CIE L*a*b* color space with a D50 reference white point and an alpha component. The meaning and range of the components is:
0. to 100.-128. to 127.type lch_ab = v4The type for colors in the CIE L*C*h*ab color space with a D50 reference white point and an alpha component. This color space is CIE L*a*b* with polar coordinates, the meaning and range of the components is:
0. to 100.0. to 181.02, but less in practice.0. to 2pi.type space = [ | `XYZ| `Lab| `Luv| `YCbr| `Yxy| `RGB| `Gray| `HSV| `HLS| `CMYK| `CMY| `CLR2| `CLR3| `CLR4| `CLR5| `CLR6| `CLR7| `CLR8| `CLR9| `CLRA| `CLRB| `CLRC| `CLRD| `CLRE| `CLRF ]The type for color spaces. These correspond to the ICC v4 supported color space, see the specification, section 7.2.6.
val space_dim : space -> intspace_dim s is the dimension of the color space s.
val pp_space : Stdlib.Format.formatter -> space -> unitpp_space s prints a textual representation of s on ppf.
The type for ICC color profiles. A color profile can describe the characteristics of a color space, an input or output device and provide a mapping to a profile connection space (PCS), which is either CIE L*a*b* or XYZ with a D50 white point. For more information about ICC profile consult the ICC FAQ and the ICC v4 specification.
This module defines only a profile for the color space of color and a grayscale color space.
val profile_of_icc : string -> profile optionprofile_of_icc s is a profile from the ICC profile byte stream s. None is returned if s doesn't seem to be a ICC profile.
Note A profile value is returned if a color space can be extracted, it doesn't guarantee a correct ICC profile byte stream.
val profile_to_icc : profile -> stringprofile_to_icc p is p's ICC profile byte stream.
val profile_dim : profile -> intprofile_space p is space_dim (profile_space d).
val p_gray_l : profilep_gray_l is a linear gray color profile