File indexing completed on 2024-05-12 15:59:32

0001 /*
0002  *  SPDX-FileCopyrightText: 2007 Cyrille Berger <cberger@cberger.net>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #include "KoColorConversionTransformation.h"
0008 
0009 #include "KoColorSpace.h"
0010 
0011 struct Q_DECL_HIDDEN KoColorConversionTransformation::Private {
0012     const KoColorSpace* srcColorSpace;
0013     const KoColorSpace* dstColorSpace;
0014     Intent renderingIntent;
0015     ConversionFlags conversionFlags;
0016 };
0017 
0018 KoColorConversionTransformation::KoColorConversionTransformation(const KoColorSpace* srcCs,
0019                                                                  const KoColorSpace* dstCs,
0020                                                                  Intent renderingIntent,
0021                                                                  ConversionFlags conversionFlags)
0022     : d(new Private)
0023 {
0024     Q_ASSERT(srcCs);
0025     Q_ASSERT(dstCs);
0026 
0027     d->srcColorSpace = srcCs;
0028     d->dstColorSpace = dstCs;
0029     d->renderingIntent = renderingIntent;
0030     d->conversionFlags = conversionFlags;
0031 }
0032 
0033 KoColorConversionTransformation::~KoColorConversionTransformation()
0034 {
0035     delete d;
0036 }
0037 
0038 const KoColorSpace* KoColorConversionTransformation::srcColorSpace() const
0039 {
0040     return d->srcColorSpace;
0041 }
0042 
0043 const KoColorSpace* KoColorConversionTransformation::dstColorSpace() const
0044 {
0045     return d->dstColorSpace;
0046 }
0047 
0048 KoColorConversionTransformation::Intent KoColorConversionTransformation::renderingIntent() const
0049 {
0050     return d->renderingIntent;
0051 }
0052 
0053 KoColorConversionTransformation::ConversionFlags KoColorConversionTransformation::conversionFlags() const
0054 {
0055     return d->conversionFlags;
0056 }
0057 
0058 void KoColorConversionTransformation::transformInPlace(const quint8 *src, quint8 *dst, qint32 nPixels) const
0059 {
0060     if (src != dst) {
0061         transform(src, dst, nPixels);
0062     } else {
0063         QByteArray buffer(srcColorSpace()->pixelSize() * nPixels, 0);
0064         transform(src, reinterpret_cast<quint8*>(buffer.data()), nPixels);
0065         memcpy(dst, buffer.data(), buffer.size());
0066     }
0067 }
0068 
0069 void KoColorConversionTransformation::setSrcColorSpace(const KoColorSpace* cs) const
0070 {
0071     Q_ASSERT(*d->srcColorSpace == *cs);
0072     d->srcColorSpace = cs;
0073 }
0074 
0075 void KoColorConversionTransformation::setDstColorSpace(const KoColorSpace* cs) const
0076 {
0077     Q_ASSERT(*d->dstColorSpace == *cs);
0078     d->dstColorSpace = cs;
0079 }