aboutsummaryrefslogtreecommitdiffstats
path: root/doc/info/chap/clut-manipulation.texinfo
blob: d0d24fd736eb9c25e0e49c670463029144f5fd3c (plain) (blame)
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
@node CLUT Manipulation
@chapter CLUT Manipulation

@command{libclut} has a number of function-like macros
for manipulating colour lookup tables. These have
3 common initial parameters, that describe the
colour lookup table that shall be manipulated.
@table @code
@item clut
Pointer to the gamma ramps. This must be a pointer
to an instance of a @code{struct} that must at least
have the array members @code{red}, @code{green}, and
@code{blue}, whose elements shall be of the time
specified by the parameter @code{type}. The struct
must also have the scalar members @code{red_size},
@code{green_size}, and @code{blue_size}, and shall be
of the type @code{size_t}; they shall specify the
number of stops (elements) in the arrays @code{.red},
@code{.green}, and @code{.blue}, respectively, which
shall be the gamma ramp for the ``red''@footnote{Acutally
orange.}, green, and blue channels respectively.
@item max
The maximum value on each stop in the ramps.
@item type
The data type used for each stop in the ramps.
@end table
@noindent
Additionally, these macros do not allow that arguments
have side-effects.@footnote{Some macros currently allow
side-effects on some parameters, but this may change
in the future.} None, if the macros have a return value.

@table @code
@item libclut_rgb_contrast(clut, max, type, r, g, b)
Apply contrast correction on the colour curves using sRGB.

In this context, contrast is a measure of difference between
the whitepoint and blackpoint, if the difference is 0 than
they are both grey.

Parameters:
@table @code
@item r
The contrast parameter for the red curve.
@item g
The contrast parameter for the green curve.
@item b
The contrast parameter for the blue curve.
@end table


@item libclut_cie_contrast(clut, max, type, r, g, b)
Apply contrast correction on the colour curves using CIE xyY.

In this context, contrast is a measure of difference between
the whitepoint and blackpoint, if the difference is 0 than
they are both grey.

Parameters:
@table @code
@item r
The contrast parameter for the red curve.
@item g
The contrast parameter for the green curve.
@item b
The contrast parameter for the blue curve.
@end table


@item libclut_rgb_brightness(clut, max, type, r, g, b)
Apply brightness correction on the colour curves using sRGB.

In this context, brightness is a measure of the whiteness
of the whitepoint.

Parameters:
@table @code
@item r
The brightness parameter for the red curve.
@item g
The brightness parameter for the green curve.
@item b
The brightness parameter for the blue curve.
@end table


@item libclut_cie_brightness(clut, max, type, r, g, b)
Apply brightness correction on the colour curves using CIE xyY.

In this context, brightness is a measure of the whiteness
of the whitepoint.

Parameters:
@table @code
@item r
The brightness parameter for the red curve.
@item g
The brightness parameter for the green curve.
@item b
The brightness parameter for the blue curve.
@end table


@item libclut_linearise(clut, max, type, r, g, b)
Convert the curves from formatted in standard RGB to linear RGB.

Parameters:
@table @code
@item r
Whether to convert the red colour curve.
@item g
Whether to convert the green colour curve.
@item b
Whether to convert the blue colour curve.
@end table


@item libclut_standardise(clut, max, type, r, g, b)
Convert the curves from formatted in linear RGB to standard RGB.

Parameters:
@table @code
@item r
Whether to convert the red colour curve.
@item g
Whether to convert the green colour curve.
@item b
Whether to convert the blue colour curve.
@end table


@item libclut_gamma(clut, max, type, r, g, b)
Apply gamma correction on the colour curves.

Parameters:
@table @code
@item r
The gamma parameter for the red curve.
@item g
The gamma parameter for the green curve.
@item b
The gamma parameter for the blue curve.
@end table


@item libclut_negative(clut, max, type, r, g, b)
Reverse the colour curves (negative image with gamma preservation.)

Parameters:
@table @code
@item r
Whether to reverse the red colour curve.
@item g
Whether to reverse the green colour curve.
@item b
Whether to reverse the blue colour curve.
@end table


@item libclut_rgb_invert(clut, max, type, r, g, b)
Invert the colour curves (negative image with gamma
invertion), using sRGB.

Parameters:
@table @code
@item r
Whether to invert the red colour curve.
@item g
Whether to invert the green colour curve.
@item b
Whether to invert the blue colour curve.
@end table


@item libclut_cie_invert(clut, max, type, r, g, b)
Invert the colour curves (negative image with gamma
invertion), using CIE xyY.

Parameters:
@table @code
@item r
Whether to invert the red colour curve.
@item g
Whether to invert the green colour curve.
@item b
Whether to invert the blue colour curve.
@end table


@item libclut_sigmoid(clut, max, type, rp, gp, bp)
Apply S-curve correction on the colour curves.
This is intended for fine tuning LCD monitors,
4.5 is good value start start testing at.
You would probably like to use @code{rgb_limits}
before this to adjust the blackpoint as that is
the only way to adjust the blackpoint on many LCD
monitors.

Parameters:
@table @code
@item rp
Pointer to the sigmoid parameter for the red curve.
@code{NULL} for no adjustment.
@item gp
Pointer to the sigmoid parameter for the green curve.
@code{NULL} for no adjustment.
@item bp
Pointer to the sigmoid parameter for the blue curve.
@code{NULL} for no adjustment.
@end table


@item libclut_rgb_limits(clut, max, type, rmin, rmax, gmin, gmax, bmin, bmax)
Changes the blackpoint and the whitepoint, using sRGB.

Parameters:
@table @code
@item rmin
The red component value of the blackpoint.
That is, the brightness on the red channel.
@item rmax
The red component value of the whitepoint.
That is, the contrast on the red channel.
@item gmin
The green component value of the blackpoint.
That is, the brightness on the green channel.
@item gmax
The green component value of the whitepoint.
That is, the contrast on the green channel.
@item bmin
The blue component value of the blackpoint.
That is, the brightness on the blue channel.
@item bmax
The blue component value of the whitepoint.
That is, the contrast on the blue channel.
@end table


@item libclut_cie_limits(clut, max, type, rmin, rmax, gmin, gmax, bmin, bmax)
Changes the blackpoint and the whitepoint, using CIE xyY.

Parameters:
@table @code
@item rmin
The red component value of the blackpoint.
That is, the brightness on the red channel.
@item rmax
The red component value of the whitepoint.
That is, the contrast on the red channel.
@item gmin
The green component value of the blackpoint.
That is, the brightness on the green channel.
@item gmax
The green component value of the whitepoint.
That is, the contrast on the green channel.
@item bmin
The blue component value of the blackpoint.
That is, the brightness on the blue channel.
@item bmax
The blue component value of the whitepoint.
That is, the contrast on the blue channel.
@end table


@item libclut_manipulate(clut, max, type, r, g, b)
Manipulate the colour curves using a function on the
sRGB colour space.

Parameters:
@table @code
@item r
Function to manipulate the red colour curve. It
shall map from old stop values to new stop values.
This should either be @code{NULL} for no manipulation,
or a function that maps from @code{double} to
@code{double}. 0 % and 100 % is encoded as 0 and 1,
respectively, in both input and ouput. Its signature
should be @code{double (*)(double)}.
@item g
Function to manipulate the green colour curve. It
shall map from old stop values to new stop values.
This should either be @code{NULL} for no manipulation,
or a function that maps from @code{double} to
@code{double}. 0 % and 100 % is encoded as 0 and 1,
respectively, in both input and ouput. Its signature
should be @code{double (*)(double)}.
@item b
Function to manipulate the blue colour curve. It
shall map from old stop values to new stop values.
This should either be @code{NULL} for no manipulation,
or a function that maps from @code{double} to
@code{double}. 0 % and 100 % is encoded as 0 and 1,
respectively, in both input and ouput. Its signature
should be @code{double (*)(double)}.
@end table


@item libclut_cie_manipulate(clut, max, type, r, g, b)
Manipulate the colour curves using a function on the
CIE xyY colour space.

Parameters:
@table @code
@item r
Function to manipulate the red colour curve. It
shall map from old stop values to new stop values.
This should either be @code{NULL} for no manipulation,
or a function that maps from @code{double} to
@code{double}. 0 % and 100 % is encoded as 0 and 1,
respectively, in both input and ouput. Its signature
should be @code{double (*)(double)}.
@item g
Function to manipulate the green colour curve. It
shall map from old stop values to new stop values.
This should either be @code{NULL} for no manipulation,
or a function that maps from @code{double} to
@code{double}. 0 % and 100 % is encoded as 0 and 1,
respectively, in both input and ouput. Its signature
should be @code{double (*)(double)}.
@item b
Function to manipulate the blue colour curve. It
shall map from old stop values to new stop values.
This should either be @code{NULL} for no manipulation,
or a function that maps from @code{double} to
@code{double}. 0 % and 100 % is encoded as 0 and 1,
respectively, in both input and ouput. Its signature
should be @code{double (*)(double)}.
@end table


@item libclut_start_over(clut, max, type, r, g, b)
Resets colour curvers to linear mappings.
(Identity mapping if imaginged to map from [0, 1] to [0, 1].)

Parameters:
@table @code
@item r
Whether to reset the red colour curve.
@item g
Whether to reset the green colour curve.
@item b
Whether to reset the blue colour curve.
@end table


@item libclut_clip(clut, max, type, r, g, b)
Clip colour curves to only map to values between the
minimum and maximum. This should be done, before apply
the curves, and before applying changes with limited
domain.

Values below 0 are set to 0, and values above @code{max}
are set to @code{max}.

Parameters:
@table @code
@item r
Whether to clip the red colour curve.
@item g
Whether to clip the green colour curve.
@item b
Whether to clip the blue colour curve.
@end table


@item libclut_lower_resolution(clut, max, type, rx, ry, gx, gy, bx, by)
Emulates low colour resolution.

Parameters:
@table @code
@item rx
The desired emulated red encoding resolution,
0 for unchanged.
@item ry
The desired emulated red output resolution,
0 for unchanged.
@item gx
The desired emulated green encoding resolution,
0 for unchanged.
@item gy
The desired emulated green output resolution,
0 for unchanged.
@item bx
The desired emulated blue encoding resolution,
0 for unchanged.
@item by
The desired emulated blue output resolution,
0 for unchanged.
@end table


@item libclut_apply(clut, max, type, filter, fmax, ftype, r, g, b)
Applies a filter or calibration.

Parameters:
@table @code
@item filter
Same as @code{clut}, but for the filter to apply.
@item fmax
Same as @code{max}, but for the filter to apply.
@item ftype
Same as @code{type}, but for the filter to apply.
(Not actually used).
@item r
Whether to apply the filter for the red curve.
@item g
Whether to apply the filter for the green curve.
@item b
Whether to apply the filter for the blue curve.
@end table


@item libclut_cie_apply(clut, max, type, filter, fmax, ftype, r, g, b)
Applies a filter or calibration, using CIE xyY.

Parameters:
@table @code
@item filter
Same as @code{clut}, but for the filter to apply.
@item fmax
Same as @code{max}, but for the filter to apply.
@item ftype
Same as @code{type}, but for the filter to apply.
(Not actually used).
@item r
Whether to apply the filter for the red curve.
@item g
Whether to apply the filter for the green curve.
@item b
Whether to apply the filter for the blue curve.
@end table



@end table

@c TODO Which macros require -lclut?