14 template<
typename TPIXEL,
typename TCHANNEL>
24 TCHANNEL * rLut = values[0];
25 TCHANNEL * gLut = values[1];
26 TCHANNEL * bLut = values[2];
27 TCHANNEL * aLut = values[3];
29 TCHANNEL * d = (TCHANNEL *) dstArea.
getAreaBgn();
30 TCHANNEL * dstAreaEnd = (TCHANNEL *) dstArea.
getAreaEnd();
31 TCHANNEL * dstAreaRowEnd = (TCHANNEL *) dstArea.
getAreaRowEnd();
35 while (d < dstAreaEnd) {
36 while (d < dstAreaRowEnd) {
47 dstAreaRowEnd += dstWidth;
52 template<
typename TPIXEL,
typename TCHANNEL>
62 TCHANNEL * rLut = values[0];
63 TCHANNEL * gLut = values[1];
64 TCHANNEL * bLut = values[2];
65 TCHANNEL * aLut = values[3];
67 TCHANNEL * d = (TCHANNEL *) dstArea.
getAreaBgn();
68 TCHANNEL * dstAreaEnd = (TCHANNEL *) dstArea.
getAreaEnd();
69 TCHANNEL * dstAreaRowEnd = (TCHANNEL *) dstArea.
getAreaRowEnd();
73 while (d < dstAreaEnd) {
74 while (d < dstAreaRowEnd) {
75 TCHANNEL doa = *(d + 3);
76 double da = doa / 255.0;
77 double sa = aLut[doa] * alpha / 255.0;
79 double ra = sa + da * sac;
81 *d = ((rLut[*d] * sa + *d * da * sac) / ra + 0.5);
83 *d = ((gLut[*d] * sa + *d * da * sac) / ra + 0.5);
85 *d = ((bLut[*d] * sa + *d * da * sac) / ra + 0.5);
91 dstAreaRowEnd += dstWidth;
96 template<
typename TPIXEL,
typename TCHANNEL>
118 TCHANNEL * rLut = values[0];
119 TCHANNEL * gLut = values[1];
120 TCHANNEL * bLut = values[2];
121 TCHANNEL * aLut = values[3];
123 TCHANNEL * d = (TCHANNEL *) dstArea.getAreaBgn();
124 TCHANNEL * m = (TCHANNEL *) mskArea.
getAreaBgn();
125 TCHANNEL * dstAreaEnd = (TCHANNEL *) dstArea.getAreaEnd();
126 TCHANNEL * dstAreaRowEnd = (TCHANNEL *) dstArea.getAreaRowEnd();
127 unsigned dstWidth = dstArea.getOrigWidth() * 4;
128 unsigned dstOffset = (dstArea.getOrigWidth() - dstArea.getAreaWidth()) * 4;
131 while (d < dstAreaEnd) {
132 while (d < dstAreaRowEnd) {
133 TCHANNEL doa = *(d + 3);
134 double da = doa / 255.0;
135 double sa = aLut[doa] * *m / 65025.0;
137 double ra = sa + da * sac;
140 *d = ((rLut[*d] * sa + *d * da * sac) / ra + 0.5);
142 *d = ((gLut[*d] * sa + *d * da * sac) / ra + 0.5);
144 *d = ((bLut[*d] * sa + *d * da * sac) / ra + 0.5);
151 dstAreaRowEnd += dstWidth;
158 template<
typename TPIXEL,
typename TCHANNEL>
179 TCHANNEL * rLut = values[0];
180 TCHANNEL * gLut = values[1];
181 TCHANNEL * bLut = values[2];
182 TCHANNEL * aLut = values[3];
184 TCHANNEL * d = (TCHANNEL *) dstArea.getAreaBgn();
186 TCHANNEL * m = (TCHANNEL *) mskArea.
getAreaBgn();
187 TCHANNEL * dstAreaEnd = (TCHANNEL *) dstArea.getAreaEnd();
188 TCHANNEL * dstAreaRowEnd = (TCHANNEL *) dstArea.getAreaRowEnd();
189 unsigned dstWidth = dstArea.getOrigWidth() * 4;
190 unsigned dstOffset = (dstArea.getOrigWidth() - dstArea.getAreaWidth()) * 4;
193 while (d < dstAreaEnd) {
194 while (d < dstAreaRowEnd) {
195 TCHANNEL doa = *(d + 3);
196 double da = doa / 255.0;
197 double sa = aLut[doa] * *m * alpha/ 65025.0;
199 double ra = sa + da * sac;
202 *d = ((rLut[*d] * sa + *d * da * sac) / ra + 0.5);
204 *d = ((gLut[*d] * sa + *d * da * sac) / ra + 0.5);
206 *d = ((bLut[*d] * sa + *d * da * sac) / ra + 0.5);
213 dstAreaRowEnd += dstWidth;
220 for (
int i = 0; i < 4; i++) {
221 if (values[i] != NULL) {