aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcolour.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/libcolour.h196
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
+