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
|
#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.
*
*/
/*
* 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, 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 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, int *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, int 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) */
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);
#endif /* CCMX_H */
|