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

0001 /*
0002  *  SPDX-FileCopyrightText: 2002 Patrick Julien <freak@codepimps.org>
0003  *  SPDX-FileCopyrightText: 2005-2006 C. Boemann <cbo@boemann.dk>
0004  *  SPDX-FileCopyrightText: 2004, 2006-2007 Cyrille Berger <cberger@cberger.net>
0005  *
0006  * SPDX-License-Identifier: LGPL-2.1-or-later
0007 */
0008 
0009 #ifndef _KO_LAB_DARKEN_COLOR_TRANSFORMATION_H_
0010 #define _KO_LAB_DARKEN_COLOR_TRANSFORMATION_H_
0011 
0012 #if !defined _MSC_VER
0013 #pragma GCC diagnostic ignored "-Wcast-align"
0014 #endif
0015 
0016 #include "KoColorTransformation.h"
0017 
0018 template<typename _lab_channels_type_>
0019 struct KoLabDarkenColorTransformation : public KoColorTransformation {
0020     KoLabDarkenColorTransformation(qint32 shade, bool compensate, qreal compensation, const KoColorSpace *colorspace)
0021         : m_colorSpace(colorspace)
0022         , m_shade(shade)
0023         , m_compensate(compensate)
0024         , m_compensation(compensation)
0025     {
0026     }
0027 
0028     void transform(const quint8 *src, quint8 *dst, qint32 nPixels) const override
0029     {
0030         *((quint32 *)dst) = *((const quint32 *)src);
0031 
0032         QColor c;
0033 
0034         for (unsigned int i = 0; i < nPixels*m_colorSpace->pixelSize(); i+=m_colorSpace->pixelSize()) {
0035             if (m_compensate) {
0036                 m_colorSpace->toQColor(src+i,&c);
0037                 c.setRed((c.red()*m_shade)/(m_compensation*255));
0038                 c.setGreen((c.green()*m_shade)/(m_compensation*255));
0039                 c.setBlue((c.blue()*m_shade)/(m_compensation*255));
0040                 m_colorSpace->fromQColor(c,dst+i);
0041             } else {
0042                 m_colorSpace->toQColor(src+i,&c);
0043                 c.setRed((c.red()*m_shade)/255);
0044                 c.setGreen((c.green()*m_shade)/255);
0045                 c.setBlue((c.blue()*m_shade)/255);
0046                 m_colorSpace->fromQColor(c,dst+i);
0047             }
0048         }
0049     }
0050     const KoColorSpace* m_colorSpace {0};
0051     const KoColorConversionTransformation* m_defaultToLab {0};
0052     const KoColorConversionTransformation* m_defaultFromLab {0};
0053     qint32 m_shade {0};
0054     bool m_compensate {false};
0055     qreal m_compensation {0.0};
0056 };
0057 
0058 #endif