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 }