diff options
author | Mattias Andrée <maandree@kth.se> | 2017-06-06 13:55:17 +0200 |
---|---|---|
committer | Mattias Andrée <maandree@kth.se> | 2017-06-06 13:59:36 +0200 |
commit | e047ec28ef55bc5a2bb8b1790201e51d02eb5a12 (patch) | |
tree | 28f7dacb5d45dbe7aa252f53a18187208fc6464a /doc/info/chap/colour-spaces.texinfo | |
parent | Prepare for release (diff) | |
download | libcolour-e047ec28ef55bc5a2bb8b1790201e51d02eb5a12.tar.gz libcolour-e047ec28ef55bc5a2bb8b1790201e51d02eb5a12.tar.bz2 libcolour-e047ec28ef55bc5a2bb8b1790201e51d02eb5a12.tar.xz |
Remove a much of stuff, change license, and add support for float and long double
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'doc/info/chap/colour-spaces.texinfo')
-rw-r--r-- | doc/info/chap/colour-spaces.texinfo | 759 |
1 files changed, 0 insertions, 759 deletions
diff --git a/doc/info/chap/colour-spaces.texinfo b/doc/info/chap/colour-spaces.texinfo deleted file mode 100644 index 9455bbc..0000000 --- a/doc/info/chap/colour-spaces.texinfo +++ /dev/null @@ -1,759 +0,0 @@ -@node Colour Spaces -@chapter Colour Spaces - -@menu -* RGB:: Generic RGB colour spaces. -* sRGB:: The Standard RGB colour space. -* CIExyY:: The CIE xyY colour model. -* CIEXYZ:: The CIE 1931 XYZ colour model. -* CIELAB:: The CIE L*a*b* colour model. -* CIELUV:: The CIE 1976 (L*, u*, v*) colour model. -* CIELChuv:: The CIE LCh@sub{uv} colour model. -* YIQ:: The YIQ colour model. -* YDbDr:: The YDbDr colour model. -* YUV:: The YUV colour model. -* YPbPr:: The YPbPr colour model. -* YCgCo:: The YCgCo colour model. -* CIE 1960 UCS:: The CIE 1960 UCS colour model. -* CIEUVW:: The CIE 1964 (U*, V*, W*) colour model. -@end menu - - - -A colour in @command{libcolour} is represented using - -@example -typedef union libcolour_colour @{ - enum libcolour_model model; - struct libcolour_rgb rgb; - struct libcolour_srgb srgb; - struct libcolour_ciexyy ciexyy; - struct libcolour_ciexyz ciexyz; - struct libcolour_cielab cielab; - struct libcolour_cieluv cieluv; - struct libcolour_cielchuv cielchuv; - struct libcolour_yiq yiq; - struct libcolour_ydbdr ydbdr; - struct libcolour_yuv yuv; - struct libcolour_ypbpr ypbpr; - struct libcolour_ycgco ycgco; - struct libcolour_cie1960ucs cie1960ucs; - struct libcolour_cieuvw cieuvw; -@} libcolour_colour_t; -@end example - -@noindent -where @code{.model} is used to select colour model. -Each @code{enum} and @code{struct} is also @code{typedef}:ed -to the same name but with an @code{_t} suffix. - -The macro @code{LIBCOLOUR_LIST_MODELS} can be used to list -all available colour models. It expands to a list of -calls to @code{X} with the appropriate value for @code{.model} -as the first argument and the @code{struct}, using the -@code{typedef} name with the @code{_t} suffix, which is used -to represent colours in that colour model as the second -argument. It can used like this: - -@example -void print_libcolour_srgb_t(libcolour_srgb* colour) -@{ - printf("sRGB(%lf, %lf, %lf, with_gamma = %i)\n", - colour->R, colour->G, colour->B, colour->with_gamma); -@} - -/* ... */ - -void print_colour(libcolour_colour_t* colour) -@{ -#define X(MODEL, TYPE)\ - case MODEL:\ - print_##TYPE((TYPE*)colour);\ - break; -#undef X - switch (colour->model) @{ - LIBCOLOUR_LIST_MODELS - default: - printf("Unknown colour model!\n"); - break; - @} -@} -@end example - -To convert between a colour into another colour space, -the function @code{libcolour_convert} is used. It takes -two arguments, both if the type @code{libcolour_colour_t*}. -The first parameter is @code{const}, it shall be the -colour you want to convert. The second parameter shall -be a different pointer, and it shall have it's @code{.model} -set to the wanted colour model, and any colour space -specific parameter for that model shall also be set. It -can be used like this: - -@example -int to_srgb(const libcolour_colour* from, libcolour_srgb_t* to) -@{ - to->model = LIBCOLOUR_SRGB; - to->with_gamma = 1; - return libcolour_convert(from, to); -@} -@end example - -@code{libcolour_convert} return 0 on success, on error @math{-1} -is returned and @code{errno} is to indicate the error. Possible -errors are: -@table @code -@item EINVAL -Invalid colour model. -@end table - -Colours obtained by conversion can be out of gamut. In RGB -colour spaces, including sRGB, this means that at least one -of the values (@code{.R}, @code{.G}, or @code{.B}) is less -than 0 or greater than 1. @command{libcolour} does not provide -any colour-matching functions for finding an in-gamut colour. - - - -@node RGB -@section Generic RGB - -RGB colours, of any RGB colour space, are presented with -@code{struct libcolour_rgb} (@code{libcolour_rgb_t}), and the -@code{.model} member shall be set to @code{LIBCOLOUR_RGB}. In -@code{union libcolour_colour}, @code{.rgb} are used for RGB -colours. RGB colours are additive. - -@code{struct libcolour_rgb} has the following members -@table @code -@item enum libcolour_model model -Shall be set to @code{LIBCOLOUR_RGB}. -@item double R -The red value. In-gamut values are between 0 and 1, inclusively. -@item double G -The green value. In-gamut values are between 0 and 1, inclusively. -@item double B -The blue value. In-gamut values are between 0 and 1, inclusively. -@item int with_gamma -Whether the the transfer function is applied to the values -of @code{.R}, @code{.G}, and @code{.B}, which makes them non-linear. -@item enum libcolour_encoding_type encoding_type -One of the following: -@table @code -@item LIBCOLOUR_ENCODING_TYPE_LINEAR -The colour space does not have a transfer function. -@item LIBCOLOUR_ENCODING_TYPE_SIMPLE -The colour space uses a simple gamma transfer function -that only uses the gamma parameter. -@item LIBCOLOUR_ENCODING_TYPE_REGULAR -The colour space uses a linear–gamma hybrid transfer -function that uses the gamma, offset, slope, and -transition parameters. -@item LIBCOLOUR_ENCODING_TYPE_CUSTOM -The colour space uses a custom transfer function. -@end table -@item double gamma -The gamma parameter of the transfer function. -Ignored unless @code{.encoding_type} is -@code{LIBCOLOUR_ENCODING_TYPE_SIMPLE} or -@code{LIBCOLOUR_ENCODING_TYPE_REGULAR}. -@item double offset -The offset parameter of the transfer function. -Ignored unless @code{.encoding_type} is -@code{LIBCOLOUR_ENCODING_TYPE_REGULAR}. -@item double slope -The slope parameter of the transfer function. -Ignored unless @code{.encoding_type} is -@code{LIBCOLOUR_ENCODING_TYPE_REGULAR}. -@item double transition -The transition parameter of the transfer -function. Ignored unless @code{.encoding_type} -is @code{LIBCOLOUR_ENCODING_TYPE_REGULAR}. -@item double transitioninv -The inverse value of the transition parameter -of the transfer function, that is, where the -transition takes place in the encoded, rather -than linear, values. This value is set -automatically. Ignored unless @code{.encoding_type} -is @code{LIBCOLOUR_ENCODING_TYPE_REGULAR}. -@item double (*to_encoded_red)(double) -Function used to apply the red channels transfer function -to a value. Ignored unless @code{.encoding_type} is -@code{LIBCOLOUR_ENCODING_TYPE_CUSTOM}. -@item double (*to_decoded_red)(double) -Function used to unapply the red channels transfer function -from a value. Ignored unless @code{.encoding_type} is -@code{LIBCOLOUR_ENCODING_TYPE_CUSTOM}. -@item double (*to_encoded_green)(double) -Function used to apply the green channels transfer function -to a value. Ignored unless @code{.encoding_type} is -@code{LIBCOLOUR_ENCODING_TYPE_CUSTOM}. -@item double (*to_decoded_green)(double) -Function used to unapply the green channels transfer function -from a value. Ignored unless @code{.encoding_type} is -@code{LIBCOLOUR_ENCODING_TYPE_CUSTOM}. -@item double (*to_encoded_blue)(double) -Function used to apply the blue channels transfer function -to a value. Ignored unless @code{.encoding_type} is -@code{LIBCOLOUR_ENCODING_TYPE_CUSTOM}. -@item double (*to_decoded_blue)(double) -Function used to unapply the blue channels transfer function -from a value. Ignored unless @code{.encoding_type} is -@code{LIBCOLOUR_ENCODING_TYPE_CUSTOM}. -@item struct libcolour_ciexyy red -The CIE xyY value of the red primarily. -@item struct libcolour_ciexyy green -The CIE xyY value of the green primarily. -@item struct libcolour_ciexyy blue -The CIE xyY value of the blue primarily. -@item struct libcolour_ciexyy white -The CIE xyY value of the white point, the Y value -should usually be 1. -@item double white_r -The red value of the white point, should usually by 1. -@item double white_g -The green value of the white point, should usually by 1. -@item double white_b -The blue value of the white point, should usually by 1. -@item double M[3][3] -Matrix used to convert a colour to CIE 1931 XYZ. -@item double Minv[3][3] -Matrix used to convert a colour from CIE 1931 XYZ. -@item enum libcolour_rgb_colour_space colour_space -The colour space. Set automatically. -@end table - -@code{libcolour_get_rgb_colour_space} is set the -values in a @code{libcolour_rgb_t} to the those used -to represent a specified RGB colour space. -@code{libcolour_get_rgb_colour_space} has two arguments: -@table @code -@item libcolour_rgb_t* -The @code{struct} whose members shall be set to represent -to selected colour space. -@item enum libcolour_rgb_colour_space -The selected colour space. -@end table - -@code{libcolour_get_rgb_colour_space} return 0 on success, -on error @math{-1} is returned and @code{errno} is to indicate -the error. Possible errors are: -@table @code -@item EINVAL -Invalid colour space. -@item EDOM -The specified colour space parameters cannot be used -as it results in matematical errors. -@end table - -The following values are available for -@code{enum libcolour_rgb_colour_space} (@code{libcolour_rgb_colour_space_t}): - -@table @code -@item LIBCOLOUR_RGB_COLOUR_SPACE_CUSTOM_FROM_MEASUREMENTS -A custom colour space. @code{.red}, @code{.green}, @code{.blue}, -@code{.white}, @code{.white_r}, @code{.white_g} and @code{.white_b} -must be set. The transfer functions, and parameters, must be set -manually. @code{.colour_space} must be set to any negative value, -@code{LIBCOLOUR_RGB_COLOUR_SPACE_CUSTOM_FROM_MEASUREMENTS} (zero), -@code{LIBCOLOUR_RGB_COLOUR_SPACE_CUSTOM_FROM_MATRIX}, or -@code{LIBCOLOUR_RGB_COLOUR_SPACE_CUSTOM_FROM_INV_MATRIX}. -@code{.red.Y}, @code{.green.Y}, @code{.blue.Y} can be any value. -@item LIBCOLOUR_RGB_COLOUR_SPACE_CUSTOM_FROM_MATRIX -A custom colour space. @code{.M}, @code{.white_r}, @code{.white_g} -and @code{.white_b} must be set. The transfer functions, and -parameters, must be set manually. @code{.colour_space} must be -set to any negative value, -@code{LIBCOLOUR_RGB_COLOUR_SPACE_CUSTOM_FROM_MEASUREMENTS} (zero), -@code{LIBCOLOUR_RGB_COLOUR_SPACE_CUSTOM_FROM_MATRIX}, or -@code{LIBCOLOUR_RGB_COLOUR_SPACE_CUSTOM_FROM_INV_MATRIX}. -@item LIBCOLOUR_RGB_COLOUR_SPACE_CUSTOM_FROM_INV_MATRIX -A custom colour space. @code{.Minv}, @code{.white_r}, @code{.white_g} -and @code{.white_b} must be set. The transfer functions, and -parameters, must be set manually. @code{.colour_space} must be -set to any negative value, -@code{LIBCOLOUR_RGB_COLOUR_SPACE_CUSTOM_FROM_MEASUREMENTS} (zero), -@code{LIBCOLOUR_RGB_COLOUR_SPACE_CUSTOM_FROM_MATRIX}, or -@code{LIBCOLOUR_RGB_COLOUR_SPACE_CUSTOM_FROM_INV_MATRIX}. -@item LIBCOLOUR_RGB_COLOUR_SPACE_SRGB -The sRGB colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_ADOBE_RGB -The Adobe RGB colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_APPLE_RGB -The Apple RGB (1998) colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_BEST_RGB -The Best RGB colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_BETA_RGB -The Beta RGB colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_BRUCE_RGB -The Bruce RGB colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_CIE_RGB -The CIE 1931 RGB colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_COLORMATCH_RGB -The ColorMatch RGB colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_DCI_P3_D65 -The DCI-P3 D65 colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_DCI_P3_THEATER -The DCI-P3 Theater colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_DON_RGB_4 -The Don RGB 4 colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_ECI_RGB -The ECI RGB colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_ECI_RGB_V2 -The ECI RGB v2 colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_EKTA_SPACE_PS5 -The Ekta Space PS5 colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_ITU_R_BT_601_625_LINE -The ITU-R Recommendation BT.601, 625 line colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_ITU_R_BT_601_525_LINE -The ITU-R Recommendation BT.601, 525 line colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_ITU_R_BT_709 -The ITU-R Recommendation BT.709 colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_ITU_R_BT_2020 -The ITU-R Recommendation BT.2020 colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_ITU_R_BT_2100_EOTF_PQ -The ITU-R Recommendation BT.2100 colour space, -using the perceptual quantization (PQ) elctro-optical -transfer function (EOTF). -@item LIBCOLOUR_RGB_COLOUR_SPACE_ITU_R_BT_2100_OOTF_PQ -The ITU-R Recommendation BT.2100 colour space, -using the perceptual quantization (PQ) opto-optical -transfer function (OOTF). -@item LIBCOLOUR_RGB_COLOUR_SPACE_ITU_R_BT_2100_OETF_PQ -The ITU-R Recommendation BT.2100 colour space, -using the perceptual quantization (PQ) opto-electronic -transfer function (OETF). -@item LIBCOLOUR_RGB_COLOUR_SPACE_ITU_R_BT_2100_EOTF_HLG -The ITU-R Recommendation BT.2100 colour space, -using the Hybrid Log-Gamma (HLG) elctro-optical -transfer function (EOTF). -@item LIBCOLOUR_RGB_COLOUR_SPACE_ITU_R_BT_2100_OOTF_HLG -The ITU-R Recommendation BT.2100 colour space, -using the Hybrid Log-Gamma (HLG) opto-optical -transfer function (OOTF). -@item LIBCOLOUR_RGB_COLOUR_SPACE_ITU_R_BT_2100_OETF_HLG -The ITU-R Recommendation BT.2100 colour space, -using the Hybrid Log-Gamma (HLG) opto-electronic -transfer function (OETF). -@item LIBCOLOUR_RGB_COLOUR_SPACE_LIGHTROOM_RGB -The Lightroom RGB colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_NTSC_RGB -The NTSC RGB colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_PAL_SECAM_RGB -The PAL/SECAM RGB colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_PROPHOTO_RGB -The ProPhoto RGB colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_SGI_RGB -The SGI RGB colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_SMPTE_240M_RGB -The SMPTE 240M RGB colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_SMPTE_C_RGB -The SMPTE C RGB colour space. -@item LIBCOLOUR_RGB_COLOUR_SPACE_WIDE_GAMUT_RGB -The wide-gamut RGB colour space, also known as -Adobe Wide Gamut RGB. -@end table - -The call @code{libcolour_proper(&c)} on a -@code{struct libcolour_rgb_t c} (done automatically for -predefined colour spaces) sets @code{c.red.model}, -@code{c.green.model}, and @code{c.blue.model} to -@code{LIBCOLOUR_CIEXYY}, and calculate and sets the Y -values for @code{c.red}, @code{c.green}, and @code{c.blue}. -Zero is always normally returned, but of there is something -wrong with with the values of the primaries, @math{-1} -is returned and @code{errno} is set to @code{EDOM}. - - - -@node sRGB -@section Standard RGB - -sRGB colours are presented with @code{struct libcolour_srgb} -(@code{libcolour_srgb_t}), and the @code{.model} member shall -be set to @code{LIBCOLOUR_SRGB}. In @code{union libcolour_colour}, -@code{.srgb} are used for sRGB colours. This is the colour model -and colour space normally used on computers, it is however not -the colour space your monitor have, although it is close to it. -sRGB is designed after the human eye, but fails to take into -account how the brain process the input to figure out which -colour it actually receives. - -@code{struct libcolour_srgb} has the following members -@table @code -@item enum libcolour_model model -Shall be set to @code{LIBCOLOUR_SRGB}. -@item double R -The red value. In-gamut values are between 0 and 1, inclusively. -@item double G -The green value. In-gamut values are between 0 and 1, inclusively. -@item double B -The blue value. In-gamut values are between 0 and 1, inclusively. -@item int with_gamma -Whether the the transfer function is applied to the values of -@code{.R}, @code{.G}, and @code{.B}, which makes them non-linear. -@end table - -The RGB color model, of which sRGB is a specific colour space, -is an additive colour model. - -For your convenience, the sRGB transfer function and its inverse -function is available for your use: - -@table @code -@item double libcolour_srgb_encode(double x) -Applies the sRGB transfer function. -@item double libcolour_srgb_decode(double x) -Unapplies the sRGB transfer function. -@end table - - - -@node CIExyY -@section CIE xyY - -CIE xyY colours are presented with @code{struct libcolour_ciexyy} -(@code{libcolour_ciexyy_t}), and the @code{.model} member shall -be set to @code{LIBCOLOUR_CIEXYY}. In @code{union libcolour_colour}, -@code{.ciexyy} are used for CIE xyY colours. This colour space is -derived from CIE 1931 XYZ and is primarily used for representing -chromaticities. - -@code{struct libcolour_ciexyy} has the following members -@table @code -@item enum libcolour_model model -Shall be set to @code{LIBCOLOUR_CIEXYY}. -@item double x -The x value. -@item double y -The y value. -@item double Y -The Y value. -@end table - -CIE xyY is not additive. CIE xyY is defined by -@math{x = X/(X + Y + Z)}, @math{y = Y/(X + Y + Z)} -where X, Y, and Z are CIE XYZ values. - - -@node CIEXYZ -@section CIE 1931 XYZ - -CIE 1931 XYZ colours are presented with @code{struct libcolour_ciexyz} -(@code{libcolour_ciexyz_t}), and the @code{.model} member shall -be set to @code{LIBCOLOUR_CIEXYZ}. In @code{union libcolour_colour}, -@code{.ciexyz} are used for CIE 1931 XYZ colours. This colour space -is derived from CIE 1931 RGB and is used as an intermediary -representation when converting between many colour spaces and -colour models, making it very useful for device independent colour -representation. - -@code{struct libcolour_ciexyz} has the following members -@table @code -@item enum libcolour_model model -Shall be set to @code{LIBCOLOUR_CIEXYZ}. -@item double X -The X value. -@item double Y -The Y value. -@item double Z -The Z value. -@end table - -CIE 1931 XYZ is additive, since it is defined by matrix -multiplication with CIE 1932 RGB which is additive because -it is an RGB colour space. - - - -@node CIELAB -@section CIE L*a*b* - -CIE L*a*b* colours are presented with @code{struct libcolour_cielab} -(@code{libcolour_cielab_t}), and the @code{.model} member shall -be set to @code{LIBCOLOUR_CIELAB}. In @code{union libcolour_colour}, -@code{.cielab} are used for CIE L*a*b* colours. CIE L*a*b* -approximates human colour perception with a lightness parameter -(L*) and two chromaticity parameters (a* and b*), it is therefore -useful in image manipulation applications. - -@code{struct libcolour_cielab} has the following members -@table @code -@item enum libcolour_model model -Shall be set to @code{LIBCOLOUR_CIELAB}. -@item double L -The L* value. 0 is black, 100 is white. -@item double a -The a* value. Negative values are green, positive values are red. -@item double b -The b* value. Negative values are blue, positive values are yellow. -@end table - -CIE L*a*b* is not additive, since conversion from -CIE 1931 XYZ is non-linear. It's white point is the CIE Standard -Illuminant D50. - - - -@node CIELUV -@section CIE 1976 (L*, u*, v*) - -CIE 1976 (L*, u*, v*) colours are presented with @code{struct libcolour_cieluv} -(@code{libcolour_cieluv_t}), and the @code{.model} member shall be set to -@code{LIBCOLOUR_CIELUV}. In @code{union libcolour_colour}, @code{.cieluv} -are used for CIE 1976 (L*, u*, v*) colours. CIE 1976 (L*, u*, v*) -approximates uniform human colour perception. - -@code{struct libcolour_cieluv} has the following members -@table @code -@item enum libcolour_model model -Shall be set to @code{LIBCOLOUR_CIELUV}. -@item double L -The L* value. 0 is black, 100 is white. -@item double u -The u* value. -@item double v -The v* value. -@item struct libcolour_ciexyz white -The white point. -@end table - -CIE L*u*v* is not additive, since conversion from -CIE 1931 XYZ is non-linear. - -The call @code{libcolour_proper(&c)} on a -@code{struct libcolour_cieluv_t c} sets -@code{c.white.model} to @code{LIBCOLOUR_CIEXYZ}. -Zero is always returned in this case. - - - -@node CIELChuv -@section CIE LCh@sub{uv} - -CIE LCh@sub{uv} (also known as CIE HLC@sub{uv}) colours are presented -with @code{struct libcolour_cielchuv} (@code{libcolour_cielchuv_t}), and -the @code{.model} member shall be set to @code{LIBCOLOUR_CIELCHUV}. In -@code{union libcolour_colour}, @code{.cielchuv} are used for CIE LCh@sub{uv} -colours. CIE LCh@sub{uv} approximates uniform human colour perception -using cylindrical representation. - -@code{struct libcolour_cielchuv} has the following members -@table @code -@item enum libcolour_model model -Shall be set to @code{LIBCOLOUR_CIELCHUV}. -@item double L -The L* value. 0 is black, 100 is white. -@item double C -@iftex -The @math{{\rm C}^{*}_{\rm uv}} value, the chroma. -@end iftex -@ifnottex -The C*@sub{uv} value, the chroma. -@end ifnottex -@item double h -The h@sub{uv} value, the hue. -@item struct libcolour_ciexyz white -The white point. -@item double one_revolution -The value lowest positive values of @code{h} that is equivalent to 0. -360 if the hue is measured in degrees, 400 if the hue is measured in -gon, and 2 pi if the hue is measured radian. Any value can be used. -@end table - -CIE LCh@sub{uv} is not additive. It is a cylindrical -representation of CIE 1976 (L*, u*, v*). - -The call @code{libcolour_proper(&c)} on a -@code{struct libcolour_cielchuv_t c} sets -@code{c.white.model} to @code{LIBCOLOUR_CIEXYZ}, -and if @code{c.one_revolution} is 0, it is set -to 360. Zero is always returned in this case. - - -@node YIQ -@section YIQ - -YIQ colours are presented with @code{struct libcolour_yiq} -(@code{libcolour_yiq_t}), and the @code{.model} member shall -be set to @code{LIBCOLOUR_YIQ}. In @code{union libcolour_colour}, -@code{.yiq} are used for YIQ colours. - -@code{struct libcolour_yiq} has the following members -@table @code -@item enum libcolour_model model -Shall be set to @code{LIBCOLOUR_YIQ}. -@item double Y -The Y value, the luma. 0 is black, 1 is white. -@item double I -The I (in-phase) value. Negative values are blue, positive values are orange. -@item double Q -The Q (quadrature) value. Negative values are green, positive values are purple. -@end table - -YIQ is additive, since conversion from CIE 1931 XYZ is done -with a matrix multiplication. It's white point is the CIE -Standard Illuminant D65. - - - -@node YDbDr -@section YDbDr - -YDbDr colours are presented with @code{struct libcolour_ydbdr} -(@code{libcolour_ydbdr_t}), and the @code{.model} member shall -be set to @code{LIBCOLOUR_YDBDR}. In @code{union libcolour_colour}, -@code{.ydbdr} are used for YDbDr colours. - -@code{struct libcolour_ydbdr} has the following members -@table @code -@item enum libcolour_model model -Shall be set to @code{LIBCOLOUR_YDBDR}. -@item double Y -The Y value, the luma. 0 is black, 1 is white. -@item double Db -The Db value. Difference (with a factor) between Y and blue. -@item double Dr -The Dr value. Difference (with a factor) between Y and red. -@end table - -YDbDr is additive, since conversion from CIE 1931 XYZ is done -with a matrix multiplication. It's white point is the CIE -Standard Illuminant D65. - - - -@node YUV -@section YUV - -YUV colours are presented with @code{struct libcolour_yuv} -(@code{libcolour_yuv_t}), and the @code{.model} member shall -be set to @code{LIBCOLOUR_YUV}. In @code{union libcolour_colour}, -@code{.yuv} are used for YUV colours. - -@code{struct libcolour_yuv} has the following members -@table @code -@item enum libcolour_model model -Shall be set to @code{LIBCOLOUR_YUV}. -@item double Y -The Y value, the luma. 0 is black, 1 is white. -@item double U -The U value. Difference (with a factor) between Y and blue. -@item double V -The V value. Difference (with a factor) between Y and red. -@end table - -YUV is additive, since conversion from YDbDr is done -with a diagonal matrix multiplication. It's white point is -the CIE Standard Illuminant D65. - - - -@node YPbPr -@section YP@sub{B}P@sub{R} - -YP@sub{B}P@sub{R} colours are presented with @code{struct libcolour_ypbpr} -(@code{libcolour_ypbpr_t}), and the @code{.model} member shall -be set to @code{LIBCOLOUR_YPBPR}. In @code{union libcolour_colour}, -@code{.ypbpr} are used for YP@sub{B}P@sub{R} colours. - -@code{struct libcolour_ypbpr} has the following members -@table @code -@item enum libcolour_model model -Shall be set to @code{LIBCOLOUR_YPBPR}. -@item double Y -The Y value, the luma. 0 is black, 1 is white. -@item double Pb -The P@sub{B} value. Difference between Y and blue. -@item double Pr -The P@sub{R} value. Difference between Y and red. -@end table - -YPbPr is additive, since conversion from CIE 1931 XYZ is done -with a matrix multiplication. It's white point is the CIE -Standard Illuminant D65. - - - -@node YCgCo -@section YCgCo - -YCgCo colours are presented with @code{struct libcolour_ycgco} -(@code{libcolour_ycgco_t}), and the @code{.model} member shall -be set to @code{LIBCOLOUR_YCGCO}. In @code{union libcolour_colour}, -@code{.ycgco} are used for YCgCo colours. - -@code{struct libcolour_ycgco} has the following members -@table @code -@item enum libcolour_model model -Shall be set to @code{LIBCOLOUR_YCGCO}. -@item double Y -The Y value, the luminance. 0 is black, 1 is white. -@item double Cg -The Cg (chrominance green) value. -@item double co -The Co (chrominance orange) value. -@end table - -YCgCo is additive, since conversion from CIE 1931 XYZ is done -with a matrix multiplication. It's white point is the CIE -Standard Illuminant D65. - - - -@node CIE 1960 UCS -@section CIE 1960 UCS - -CIE 1960 UCS colours are presented with @code{struct libcolour_cie1960ucs} -(@code{libcolour_cie1960ucs_t}), and the @code{.model} member shall -be set to @code{LIBCOLOUR_CIE1960UCS}. In @code{union libcolour_colour}, -@code{.cie1960ucs} are used for CIE 1960 UCS colours. - -@code{struct libcolour_cie1960ucs} has the following members -@table @code -@item enum libcolour_model model -Shall be set to @code{LIBCOLOUR_CIE1960UCS}. -@item double u -The u value. -@item double v -The v value. -@item double Y -The Y value, the luminance. -@end table - -CIE 1960 UCS is not additive. CIE 1960 UCS is defined by -@math{u = 4X/(X + 15Y + 3Z)}, @math{v = 6Y/(X + 15Y + 3Z)} -where X, Y, and Z are CIE XYZ values. - - - -@node CIEUVW -@section CIE 1964 (U*, V*, W*) - -CIE 1964 (U*, V*, W*) colours are presented with @code{struct libcolour_cieuvw} -(@code{libcolour_cieuvw_t}), and the @code{.model} member shall -be set to @code{LIBCOLOUR_CIEUVW}. In @code{union libcolour_colour}, -@code{.cieuvw} are used for CIE 1964 (U*, V*, W*) colours. - -@code{struct libcolour_cieuvw} has the following members -@table @code -@item enum libcolour_model model -Shall be set to @code{LIBCOLOUR_CIEUVW}. -@item double U -The U* value. -@item double V -The V* value. -@item double W -The W* value. -@item double u0 -The u' chromaticity coordinate of a ``specified white object''. -u' is defined as @math{4X/(X + 15Y + 3Z)} where X, Y, and Z -are CIE 1931 XYZ values. -@item double v0 -The v' chromaticity coordinate of a ``specified white object''. -u' is defined as @math{9Y/(X + 15Y + 3Z)} where X, Y, and Z -are CIE 1931 XYZ values. -@end table - -CIE 1960 UCS is not additive. - |