diff options
Diffstat (limited to '')
-rw-r--r-- | src/libcolour.h | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/src/libcolour.h b/src/libcolour.h new file mode 100644 index 0000000..f579dfb --- /dev/null +++ b/src/libcolour.h @@ -0,0 +1,196 @@ +/** + * Copyright © 2016 Mattias Andrée <maandree@kth.se> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +#ifndef LIBCOLOUR_H +#define LIBCOLOUR_H + + + +union libcolour_colour; + + +typedef enum libcolour_model { + LIBCOLOUR_RGB, + LIBCOLOUR_SRGB, + LIBCOLOUR_CIEXYY, + LIBCOLOUR_CIEXYZ, + LIBCOLOUR_CIELAB, + LIBCOLOUR_CIELUV, + LIBCOLOUR_CIELCH, + LIBCOLOUR_YIQ, + LIBCOLOUR_YDBDR, + LIBCOLOUR_YUV, + LIBCOLOUR_YPBPR, + LIBCOLOUR_YCGCO, + LIBCOLOUR_CIE1960UCS, + LIBCOLOUR_CIEUVW +} libcolour_model_t; + + +typedef enum libcolour_rgb_colour_space { +} libcolour_rgb_colour_space_t; + + +typedef struct libcolour_rgb { + enum libcolour_model model; + double R; + double G; + double B; + int with_gamma; + int regular_gamma; + double gamma; + union libcolour_colour red; + union libcolour_colour green; + union libcolour_colour blue; + union libcolour_colour white; + double (*to_encoded_red)(double); + double (*to_decoded_red)(double); + double (*to_encoded_green)(double); + double (*to_decoded_green)(double); + double (*to_encoded_blue)(double); + double (*to_decoded_blue)(double); + double M[3][3]; + double Minv[3][3]; + enum libcolour_rgb_colour_space colour_space; +} libcolour_srgb_t; + +typedef struct libcolour_srgb { + enum libcolour_model model; + double R; + double G; + double B; + int with_gamma; +} libcolour_srgb_t; + +typedef struct libcolour_ciexyy { + enum libcolour_model model; + double x; + double y; + double Y; +} libcolour_ciexyy_t; + +typedef struct libcolour_ciexyz { + enum libcolour_model model; + double X; + double Y; + double Z; +} libcolour_ciexyz_t; + +typedef struct libcolour_cielab { + enum libcolour_model model; + double L; + double a; + double n; +} libcolour_cielab_t; + +typedef struct libcolour_cieluv { + enum libcolour_model model; + double L; + double u; + double v; + union libcolour_colour white; +} libcolour_cieluv_t; + +typedef struct libcolour_cielch { + enum libcolour_model model; + double L; + double C; + double h; + union libcolour_colour white; +} libcolour_cielch_t; + +typedef struct libcolour_yiq { + enum libcolour_model model; + double Y; + double I; + double Q; +} libcolour_yiq_t; + +typedef struct libcolour_ydbdr { + enum libcolour_model model; + double Y; + double Db; + double Dr; +} libcolour_ydbdr_t; + +typedef struct libcolour_yuv { + enum libcolour_model model; + double Y; + double U; + double V; +} libcolour_yuv_t; + +typedef struct libcolour_ypbpr { + enum libcolour_model model; + double Y; + double Pb; + double Pr; +} libcolour_ypbpr_t; + +typedef struct libcolour_ycgco { + enum libcolour_model model; + double Y; + double Cg; + double Co; +} libcolour_ycgco_t; + +typedef struct libcolour_cie1960ucs { + enum libcolour_model model; + double u; + double v; + double Y; +} libcolour_cie1960ucs_t; + +typedef struct libcolour_cieuvw { + enum libcolour_model model; + double U; + double V; + double W; + double u0; + double v0; +} libcolour_cieuvw_t; + + +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_cielch cielch; + 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; + + + +int libcolour_convert(const libcolour_colour_t* restrict from, libcolour_colour_t* restrict to); +double libcolour_srgb_encode(double); +double libcolour_srgb_decode(double); +int libcolour_delta_e(const libcolour_colour_t*, const libcolour_colour_t*, double*); +int libcolour_proper(libcolour_colour_t*); + + + +#endif + |