#ifndef COLOURSPACE_H_INCLUDED #define COLOURSPACE_H_INCLUDED #ifdef __cplusplus extern "C" { #endif /** * Convert linear sRGB quantities to nonlinear sRGB R'G'B' in [0,1]. */ void linear_to_nonlinear_srgb( double r, double g, double b, double *rp, double *gp, double *bp ); /** * Convert nonlinear sRGB R'G'B' to linear sRGB in [0,1]. */ void nonlinear_to_linear_srgb( double rp, double gp, double bp, double *r, double *g, double *b ); /** * Convert ITU-R BT.709 quantities to nonlinear R'G'B' in [0,1]. */ void linear_to_nonlinear_rec709( double r, double g, double b, double *rp, double *gp, double *bp ); /** * Convert ITU-R BT.709 nonlinear R'G'B' to linear RGB in [0,1]. */ void nonlinear_to_linear_rec709( double rp, double gp, double bp, double *r, double *g, double *b ); /** * Convert linear ITU-R BT.709 RGB to CIE XYZ in [0,1]. */ void rgb_to_xyz_rec709( double r, double g, double b, double *x, double *y, double *z ); /** * Convert CIE XYZ to linear ITU-R BT.709 RGB in [0,1]. */ void xyz_to_rgb_rec709( double x, double y, double z, double *r, double *g, double *b ); /** * Convert linear sRGB to CIE XYZ in [0,1]. */ void srgb_to_xyz( double r, double g, double b, double *x, double *y, double *z ); /** * Convert CIE XYZ to linear ITU-R BT.709 RGB in [0,1]. */ void xyz_to_srgb( double x, double y, double z, double *r, double *g, double *b ); /** * Convert linear ITU-R BT.709 RGB to fake-L*a*b* for interpolations. */ void rgb_to_fakelab_rec709( double r, double g, double b, double *lstar, double *astar, double *bstar ); /** * Convert fake-L*a*b* back to linear ITU-R BT.709 RGB. */ void fakelab_to_rgb_rec709( double lstar, double astar, double bstar, double *r, double *g, double *b ); /** * Convert from xyY-space to XYZ coordinates. */ void xyy_to_xyz( double x, double y, double Y, double *rx, double *ry, double *rz ); /** * Convert from u'v'Y-space to XYZ coordinates. */ void uvy_to_xyz( double up, double vp, double Y, double *rx, double *ry, double *rz ); /** * Gamut maps (using saturation) a negative-valued RGB triple, assuming * (1,1,1) as the white point. */ void closest_in_gamut_srgb( double r, double g, double b, double wr, double wg, double wb, double *ri, double *gi, double *bi ); #ifdef __cplusplus }; #endif #endif /* COLOURSPACE_H_INCLUDED */