aboutsummaryrefslogtreecommitdiffstats
path: root/libglitter_desaturate_double.3
blob: 36a5ef878fe1782eeb306cb6455c4fa07286eb62 (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
.TH LIBGLITTER_*DESATURATE_* 3 LIBGLITTER
.SH NAME
libglitter_*desature_* - Create a blend between subpixel- and greyscale-antialiasing
.SH SYNOPSIS
.LP
.nf
#include <libglitter.h>

void libglitter_desaturate_double(double **\fIrasters\fP, size_t \fInrasters\fP,
                                  size_t \fIrowsize\fP, size_t \fIcellsize\fP,
                                  size_t \fIwidth\fP, size_t \fIheight\fP,
                                  double \fIsaturation\fP,
                                  const double *\fIprimary_ys\fP);

void libglitter_desaturate_float(float **\fIrasters\fP, size_t \fInrasters\fP,
                                 size_t \fIrowsize\fP, size_t \fIcellsize\fP,
                                 size_t \fIwidth\fP, size_t \fIheight\fP,
                                 float \fIsaturation\fP,
                                 const float *\fIprimary_ys\fP);

void libglitter_per_channel_desaturate_double(double **\fIrasters\fP, size_t \fInrasters\fP,
                                              size_t \fIrowsize\fP, size_t \fIcellsize\fP,
                                              size_t \fIwidth\fP, size_t \fIheight\fP,
                                              const double \fIsaturations\fP,
                                              const double *\fIprimary_ys\fP);

void libglitter_per_channel_desaturate_float(float **\fIrasters\fP, size_t \fInrasters\fP,
                                             size_t \fIrowsize\fP, size_t \fIcellsize\fP,
                                             size_t \fIwidth\fP, size_t \fIheight\fP,
                                             const float \fIsaturations\fP,
                                             const float *\fIprimary_ys\fP);
.fi
.PP
Link with
.IR "-lglitter -lm" .
.SH DESCRIPTION
The
.BR libglitter_desaturate_double (),
.BR libglitter_desaturate_float (),
.BR libglitter_per_channel_desaturate_double (),
and
.BR libglitter_per_channel_desaturate_float (),
functions desaturates a set of corasters (makes them more grey).
.PP
.I rasters
shall be the list of rasters, which are modified in place.
The function may offset the input pointers in this list
during execution. Therefore, the contents of this list shall
be considered undefined immediately when the function is
called, and may not be modified before the function terminates.
The application must therefore have the pointers to these
rasters saved elsewhere.
.PP
The number of rasters shall be specified as the
.I nrasters
argument.
.PP
.I cellsize
shall be the number of elements in a raster the pointer
to the raster must be offset with to get to a pointer to
the next cell in the raster.
.PP
.I rowsize
shall be the number of cells (not elements; but rather the
number of elements divided by
.IR input_cellsize )
in a raster the pointer to the raster must be offset with
to get a pointer to the next row but the same column in
the raster
.PP
.I width
and
.I height
shall describe the affected area in the rasters.
.I width
shall be the number of pixels the rasters have
horizontally, and 
.I height
shall be the number of pixels the rasters have
vertically.
.PP
For the
.BR libglitter_desaturate_double ()
and
.BR libglitter_desaturate_float ()
functions, the
.I saturation
argument shall be how saturated the subpixel-antialiasing shall
be, where 0 renders greyscale-antialiasing and 1 renders regular
subpixel-antialiasing. For the
.BR libglitter_per_channel_desaturate_double ()
and
.BR libglitter_per_channel_desaturate_float ()
functions this parameter is replaced with the
.I saturations
parameter which shall be a list of one saturation value per
raster: these functions let the user desaturate each channel
by a different amount.
.PP
Each primary colour's CIE Y value shall be provided via the
.I primary_ys
parameter. If you only have the output's primary colours'
chroma as CIE xy values, and the output's white point, the
.BR libglitter_get_colour_model_conversion_matrix_double (3)
and
.BR libglitter_get_colour_model_conversion_matrix_float (3)
can calculate and output the primary colour's CIE Y values.
If
.I nrasters
is 3 and the order of the rasters is (0) red, (1) green, (2) blue,
.I primary_ys
can also be
.IR NULL ,
in which case the appropriate values for the sRGB colour model is used.
.PP
By default, these functions do not use hardware acceleration,
they run on the CPU. However the
.BR libglitter_enable_acceleration (3)
may be able to enable hardware acceleration for these
functions. It will require at least the following bits in
its first argument to enable hardware acceleration:
.RS
.TP
.I LIBGLITTER_FEATURE_CU_DESATURATION | LIBGLITTER_FEATURE_DOUBLE_TYPE
for
.BR libglitter_desaturate_double (),
.TP
.I LIBGLITTER_FEATURE_CU_DESATURATION | LIBGLITTER_FEATURE_FLOAT_TYPE
for
.BR libglitter_desaturate_float (),
.TP
.I LIBGLITTER_FEATURE_PC_DESATURATION | LIBGLITTER_FEATURE_DOUBLE_TYPE
for
.BR libglitter_per_channel_desaturate_double (),
or
.TP
.I LIBGLITTER_FEATURE_PC_DESATURATION | LIBGLITTER_FEATURE_FLOAT_TYPE
for
.BR libglitter_per_channel_desaturate_float ().
.RE
.SH RETURN VALUES
None.
.SH ERRORS
None.
.SH SEE ALSO
.BR libglitter (7),
.BR libglitter_colour_model_convert_rasters_double (3),
.BR libglitter_compose_double (3)