55 const int equalizationMode = config->equalizationMode();
59 if (config->alignToPixelGrid()) {
61 generate(dst, size, config, progressUpdater, sampler);
64 generate(dst, size, config, progressUpdater, sampler);
69 const int pattern = config->pattern();
70 const int shape = config->shape();
71 const int interpolation = config->interpolation();
81 generate(dst, size, config, progressUpdater, sampler);
84 generate(dst, size, config, progressUpdater, sampler);
89 generate(dst, size, config, progressUpdater, sampler);
92 generate(dst, size, config, progressUpdater, sampler);
99 generate(dst, size, config, progressUpdater, sampler);
102 generate(dst, size, config, progressUpdater, sampler);
107 generate(dst, size, config, progressUpdater, sampler);
110 generate(dst, size, config, progressUpdater, sampler);
117 generate(dst, size, config, progressUpdater, sampler);
120 generate(dst, size, config, progressUpdater, sampler);
125 generate(dst, size, config, progressUpdater, sampler);
128 generate(dst, size, config, progressUpdater, sampler);
134 generate(dst, size, config, progressUpdater, sampler);
137 generate(dst, size, config, progressUpdater, sampler);
142 generate(dst, size, config, progressUpdater, sampler);
145 generate(dst, size, config, progressUpdater, sampler);
153 generate(dst, size, config, progressUpdater, sampler);
156 generate(dst, size, config, progressUpdater, sampler);
161 generate(dst, size, config, progressUpdater, sampler);
164 generate(dst, size, config, progressUpdater, sampler);
171 generate(dst, size, config, progressUpdater, sampler);
174 generate(dst, size, config, progressUpdater, sampler);
179 generate(dst, size, config, progressUpdater, sampler);
182 generate(dst, size, config, progressUpdater, sampler);
189 generate(dst, size, config, progressUpdater, sampler);
192 generate(dst, size, config, progressUpdater, sampler);
197 generate(dst, size, config, progressUpdater, sampler);
200 generate(dst, size, config, progressUpdater, sampler);
207 generate(dst, size, config, progressUpdater, sampler);
210 generate(dst, size, config, progressUpdater, sampler);
215 generate(dst, size, config, progressUpdater, sampler);
218 generate(dst, size, config, progressUpdater, sampler);
225 generate(dst, size, config, progressUpdater, sampler);
228 generate(dst, size, config, progressUpdater, sampler);
233 generate(dst, size, config, progressUpdater, sampler);
236 generate(dst, size, config, progressUpdater, sampler);
249 const Sampler &sampler)
const
251 const qreal contrast = config->contrast() / 50.0 - 1.0;
252 const bool useThresholdFunction =
qFuzzyCompare(contrast, 1.0);
254 if (useThresholdFunction) {
255 const qreal brightness = config->brightness() / 100.0;
257 generate(dst, size, config, progressUpdater, sampler, thresholdFunction);
259 const qreal brightness = config->brightness() / 50.0 - 1.0;
261 if (bypassBrightnessContrast) {
263 generate(dst, size, config, progressUpdater, sampler, brightnessContrastFunction);
266 generate(dst, size, config, progressUpdater, sampler, brightnessContrastFunction);
292 const Sampler &sampler,
293 const PostprocessingFunction &postprocessingFunction)
const
296 Q_ASSERT(!device.
isNull());
309 KoColor foregroundColor = config->foregroundColor();
310 KoColor backgroundColor = config->backgroundColor();
311 qreal foregroundOpacity = config->foregroundOpacity() / 100.0;
312 qreal backgroundOpacity = config->backgroundOpacity() / 100.0;
315 foregroundColor.
setOpacity(foregroundOpacity);
316 backgroundColor.
setOpacity(backgroundOpacity);
321 backgroundDevice =
new KisPaintDevice(colorSpace,
"screentone_generator_background_paint_device");
323 backgroundDevice = device;
326 foregroundDevice->
fill(
bounds, foregroundColor);
328 backgroundDevice->
fill(
bounds, backgroundColor);
334 if (!config->invert()) {
336 qreal
v = std::round(sampler(it.
x(), it.
y()) * 10000.0) / 10000.0;
337 v = qBound(0.0, postprocessingFunction(
v), 1.0);
338 *it.
rawData() = 255 -
static_cast<quint8
>(qRound(
v * 255.0));
342 qreal
v = std::round(sampler(it.
x(), it.
y()) * 10000.0) / 10000.0;
343 v = qBound(0.0, postprocessingFunction(
v), 1.0);
344 *it.
rawData() =
static_cast<quint8
>(qRound(
v * 255.0));