1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
#ifndef CCMX_H
#define CCMX_H
/*
* Argyll Color Correction System
* Colorimeter Correction Matrix support.
*
*/
/*
* Author: Graeme W. Gill
* Date: 19/8/2010
*
* Copyright 2010 Graeme W. Gill
* All rights reserved.
*
* This material is licenced under the GNU GENERAL PUBLIC LICENSE Version 2 or later :-
* see the License2.txt file for licencing details.
*
* NOTE though that if SALONEINSTLIB is not defined, that this file depends
* on other libraries that are licenced under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3.
*
*/
#ifdef __cplusplus
extern "C" {
#endif
/*
* This object provides storage and application of a 3x3 XYZ
* corretion matrix suitable for corrected a particular
* display colorimeter for a particular display.
*/
/* ------------------------------------------------------------------------------ */
struct _ccmx {
/* Public: */
void (*del)(struct _ccmx *p);
/* Set the contents of the ccmx. return nz on error. */
int (*set_ccmx)(struct _ccmx *p, char *desc, char *inst, char *disp, disptech dtech,
int refrmode, int cbid, char *sel, char *refd, int oem, double mtx[3][3]);
/* Create a ccmx from measurements. return nz on error. */
int (*create_ccmx)(struct _ccmx *p, char *desc, char *inst, char *disp, disptech dtech,
int refrmode, int cbid, char *sel, char *refd, int oem,
int nsamples, double (*refs)[3], double (*cols)[3]);
/* write to a CGATS .ccmx file */
int (*write_ccmx)(struct _ccmx *p, char *filename);
/* write a CGATS .ccmx file to a memory buffer. */
/* return nz on error, with message in err[] */
int (*buf_write_ccmx)(struct _ccmx *p, unsigned char **buf, size_t *len);
/* read from a CGATS .ccmx file */
int (*read_ccmx)(struct _ccmx *p, char *filename);
/* read from a CGATS .ccmx file from a memory buffer. */
int (*buf_read_ccmx)(struct _ccmx *p, unsigned char *buf, size_t len);
/* Correct an XYZ value */
void (*xform) (struct _ccmx *p,
double *out, /* Output XYZ */
double *in); /* Input XYZ */
/* Private: */
/* (All char * are owned by ccmx) */
char *desc; /* Desciption (optional) */
char *inst; /* Name of colorimeter instrument */
char *disp; /* Name of display (optional if tech) */
disptech dtech; /* Display Technology enumeration (optional if disp) */
char *tech; /* Technology string (Looked up from dtech enum) */
int cc_cbid; /* Calibration display type base ID required, 0 if not known */
int refrmode; /* Refresh mode, -1 if unknown, 0 of no, 1 if yes */
char *sel; /* Optional UI selector characters. May be NULL */
char *ref; /* Name of spectrometer instrument (optional) */
int oem; /* nz if oem origin */
double matrix[3][3]; /* Transform matrix */
double av_err; /* Average error of fit */
double mx_err; /* Maximum error of fit */
/* Houskeeping */
int errc; /* Error code */
char err[200]; /* Error message */
}; typedef struct _ccmx ccmx;
/* Create a new, uninitialised ccmx */
ccmx *new_ccmx(void);
#ifdef __cplusplus
}
#endif
#endif /* CCMX_H */
|