Krita Source Code Documentation
Loading...
Searching...
No Matches
KoMultipleColorConversionTransformation.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2007 Cyrille Berger <cberger@cberger.net>
3 *
4 * SPDX-License-Identifier: LGPL-2.1-or-later
5*/
6
8
9#include <QList>
10
11#include <KoColorSpace.h>
12
17
18
19KoMultipleColorConversionTransformation::KoMultipleColorConversionTransformation(const KoColorSpace* srcCs, const KoColorSpace* dstCs, Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags)
20 : KoColorConversionTransformation(srcCs, dstCs, renderingIntent, conversionFlags)
21 , d(new Private)
22{
23 d->maxPixelSize = qMax(srcCs->pixelSize(), dstCs->pixelSize());
24}
26{
27 Q_FOREACH (KoColorConversionTransformation* transfo, d->transfos) {
28 delete transfo;
29 }
30 delete d;
31}
33{
34 d->transfos.append(transfo);
35 d->maxPixelSize = qMax(d->maxPixelSize, transfo->srcColorSpace()->pixelSize());
36 d->maxPixelSize = qMax(d->maxPixelSize, transfo->dstColorSpace()->pixelSize());
37}
38void KoMultipleColorConversionTransformation::transform(const quint8 *src, quint8 *dst, qint32 nPixels) const
39{
40 Q_ASSERT(d->transfos.size() > 1); // Be sure to have a more than one transformation
41 quint8 *buff1 = new quint8[d->maxPixelSize*nPixels];
42 quint8 *buff2 = 0;
43 if (d->transfos.size() > 2) {
44 buff2 = new quint8[d->maxPixelSize*nPixels]; // a second buffer is needed
45 }
46 d->transfos.first()->transform(src, buff1, nPixels);
47 int lastIndex = d->transfos.size() - 2;
48 for (int i = 1; i <= lastIndex; i++) {
49 d->transfos[i]->transform(buff1, buff2, nPixels);
50 quint8* tmp = buff1;
51 buff1 = buff2;
52 buff2 = tmp;
53 }
54 d->transfos.last()->transform(buff1, dst, nPixels);
55 delete [] buff2;
56 delete [] buff1;
57}
virtual quint32 pixelSize() const =0
void transform(const quint8 *src, quint8 *dst, qint32 nPixels) const override
void appendTransfo(KoColorConversionTransformation *transfo)
KoMultipleColorConversionTransformation(const KoColorSpace *srcCs, const KoColorSpace *dstCs, KoColorConversionTransformation::Intent, KoColorConversionTransformation::ConversionFlags conversionFlags)