73 const QRect& applyRect,
77 Q_ASSERT(device != 0);
84 dbgPlugins <<
"The LAB colorspace is not available.";
99 dbgPlugins <<
"Compute the means and sigmas of src";
100 double meanL_src = 0., meanA_src = 0., meanB_src = 0.;
101 double sigmaL_src = 0., sigmaA_src = 0., sigmaB_src = 0.;
106 const quint16* data =
reinterpret_cast<const quint16*
>(srcIt.
oldRawData());
119 double totalSize = 1. / (applyRect.width() * applyRect.height());
120 meanL_src *= totalSize;
121 meanA_src *= totalSize;
122 meanB_src *= totalSize;
123 sigmaL_src *= totalSize;
124 sigmaA_src *= totalSize;
125 sigmaB_src *= totalSize;
127 dbgPlugins << totalSize <<
"" << meanL_src <<
"" << meanA_src <<
"" << meanB_src <<
"" << sigmaL_src <<
"" << sigmaA_src <<
"" << sigmaB_src;
129 double meanL_ref = config->getDouble(
"meanL");
130 double meanA_ref = config->getDouble(
"meanA");
131 double meanB_ref = config->getDouble(
"meanB");
132 double sigmaL_ref = config->getDouble(
"sigmaL");
133 double sigmaA_ref = config->getDouble(
"sigmaA");
134 double sigmaB_ref = config->getDouble(
"sigmaB");
139 double coefL = sqrt((sigmaL_ref - meanL_ref * meanL_ref) / (sigmaL_src - meanL_src * meanL_src));
140 double coefA = sqrt((sigmaA_ref - meanA_ref * meanA_ref) / (sigmaA_src - meanA_src * meanA_src));
141 double coefB = sqrt((sigmaB_ref - meanB_ref * meanB_ref) / (sigmaB_src - meanB_src * meanB_src));
148 const quint16* data =
reinterpret_cast<const quint16*
>(srcLabIt.
oldRawData());
150 labPixel[0] = (quint16)
CLAMP(((
double)data[0] - meanL_src) * coefL + meanL_ref, 0., 65535.);
151 labPixel[1] = (quint16)
CLAMP(((
double)data[1] - meanA_src) * coefA + meanA_ref, 0., 65535.);
152 labPixel[2] = (quint16)
CLAMP(((
double)data[2] - meanB_src) * coefB + meanB_ref, 0., 65535.);
153 labPixel[3] = data[3];
154 oldCS->
fromLabA16(
reinterpret_cast<const quint8*
>(labPixel), dstIt.
rawData(), 1);
void convertTo(const KoColorSpace *dstColorSpace, KoColorConversionTransformation::Intent renderingIntent=KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::ConversionFlags conversionFlags=KoColorConversionTransformation::internalConversionFlags(), KUndo2Command *parentCommand=nullptr, KoUpdater *progressUpdater=nullptr)