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
|
#ifndef GAMMAP_H
#define GAMMAP_H
/*
* Argyll Gamut Mapping Library
*
* Author: Graeme W. Gill
* Date: 1/10/2000
* Version: 2.00
*
* Copyright 2000 - 2006 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.
*/
/* Gamut mapping object */
struct _gammap {
/* Private: */
int dbg; /* NZ to turn on debug messages */
/* neutral axis alignment transform applied to source: */
double grot[3][4]; /* Incoming grey axis rotation matrix */
double igrot[3][4]; /* Inverse of above */
rspl *grey; /* Forward L map */
rspl *igrey; /* Inverse L map */
/* Source to destination gamut map applied */
/* to transformed source: */
rspl *map; /* Rotated, L mapped Lab -> Lab gamut map */
double imin[3], imax[3]; /* Input range limits of map */
double tv[3]; /* Inversion target value */
/* Public: */
/* Methods */
void (*del)(struct _gammap *s); /* Free ourselves */
void (*domap)(struct _gammap *s, double *out, double *in); /* Do the mapping */
void (*invdomap1)(struct _gammap *s, double *out, double *in); /* Do the inverse mapping */
}; typedef struct _gammap gammap;
#ifdef NEVER
/* Method of black point adaptation */
typedef enum {
gmm_BPadpt = 0, /* Adapt source black point to destination */
gmm_noBPadpt = 1, /* Don't adapt black point to destination */
gmm_bendBP = 2, /* Don't adapt black point, bend it to dest. at end */
gmm_clipBP = 3 /* Don't adapt black point, clip it to dest. at end */
} gmm_BPmap;
#endif
/* Creator */
gammap *new_gammap(
int verb, /* Verbose flag */
gamut *sc_gam, /* Source colorspace gamut */
gamut *s_gam, /* Source image gamut (NULL if none) */
gamut *d_gam, /* Destination colorspace gamut */
icxGMappingIntent *gmi, /* Gamut mapping specification */
gamut *sh_gam, /* If not NULL, then use sc_gam for the luminence */
/* mapping, and sh_gam for the hull mapping (i.e. general compression) */
int src_kbp, /* Use K only black point as src gamut black point */
int dst_kbp, /* Use K only black point as dst gamut black point */
int dst_cmymap, /* masks C = 1, M = 2, Y = 4 to force 100% cusp map */
int rel_oride, /* 0 = normal, 1 = override min relative, 2 = max relative */
int mapres, /* Gamut map resolution, typically 9 - 33 */
double *mn, /* If not NULL, set minimum mapping input range */
double *mx, /* for rspl grid */
char *diagname /* If non-NULL, write a gamut mapping diagnostic WRL */
);
#endif /* GAMMAP_H */
|