summaryrefslogtreecommitdiff
path: root/xicc/xcal.h
diff options
context:
space:
mode:
Diffstat (limited to 'xicc/xcal.h')
-rw-r--r--xicc/xcal.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/xicc/xcal.h b/xicc/xcal.h
new file mode 100644
index 0000000..99f1c9c
--- /dev/null
+++ b/xicc/xcal.h
@@ -0,0 +1,78 @@
+
+#ifndef XCAL_H
+#define XCAL_H
+
+/*
+ * Argyll Color Correction System
+ * Calibration curve class.
+ *
+ * Author: Graeme W. Gill
+ * Date: 30/10/2005
+ *
+ * Copyright 2005 Graeme W. Gill
+ * All rights reserved.
+ * This material is licenced under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3 :-
+ * see the License.txt file for licencing details.
+ *
+ * This class allows reading and using a calibration file.
+ * Creation is currently left up to specialized programs (dispcal, printcal).
+ * This is also used by xicc to automatically take calibration into account
+ * when computing ink limits.
+ */
+
+struct _xcal {
+
+ /* Public: */
+ void (*del)(struct _xcal *p);
+
+ /* Read a calibration file from a CGATS table */
+ /* Return nz if this fails (filename is for error messages) */
+ int (*read_cgats) (struct _xcal *p, cgats *cg, int table, char *filename);
+
+ /* Read a calibration file */
+ /* Return nz if this fails */
+ int (*read) (struct _xcal *p, char *filename);
+
+ /* Write a calibration to a new cgats table */
+ /* Return nz if this fails */
+ int (*write_cgats)(struct _xcal *p, cgats *tcg);
+
+ /* Write a calibration file */
+ /* Return nz if this fails */
+ int (*write)(struct _xcal *p, char *filename);
+
+ /* Translate values through the curves curves. */
+ void (*interp) (struct _xcal *p, double *out, double *in);
+
+ /* Translate a value backwards through the curves. */
+ /* Return nz if the inversion fails */
+ int (*inv_interp) (struct _xcal *p, double *out, double *in);
+
+ /* Translate a value through one of the curves */
+ double (*interp_ch) (struct _xcal *p, int ch, double in);
+
+ /* Translate a value backwards through one of the curves */
+ /* Return -1.0 if the inversion fails */
+ double (*inv_interp_ch) (struct _xcal *p, int ch, double in);
+
+ int noramdac; /* Set to nz if there was no VideoLUT access */
+
+ /* Private: */
+ icProfileClassSignature devclass; /* Type of device */
+ inkmask devmask; /* ICX ink mask of device space */
+ icColorSpaceSignature colspace; /* Corresponding ICC device space sig (0 if none) */
+ int devchan; /* Number of chanels in device space */
+ profxinf xpi; /* Extra calibration description information */
+
+ char err[CGATS_ERRM_LENGTH]; /* Error message */
+ int errc; /* Error code */
+
+ rspl *cals[MAX_CHAN];
+
+}; typedef struct _xcal xcal;
+
+/* Create a new, uninitialised xcal */
+xcal *new_xcal(void);
+
+#endif /* XCAL */
+