185
185
const KoColorConversionTransformation* KoColorSpace::fromLabA16Converter() const
187
187
if (!d->transfoFromLABA16) {
188
d->transfoFromLABA16 = KoColorSpaceRegistry::instance()->colorConversionSystem()->createColorConverter(KoColorSpaceRegistry::instance()->lab16("") , this) ;
188
d->transfoFromLABA16 = KoColorSpaceRegistry::instance()->colorConversionSystem()->createColorConverter(KoColorSpaceRegistry::instance()->lab16(""), this, KoColorConversionTransformation::IntentPerceptual, KoColorConversionTransformation::BlackpointCompensation) ;
190
190
return d->transfoFromLABA16;
192
192
const KoColorConversionTransformation* KoColorSpace::toRgbA16Converter() const
194
194
if (!d->transfoToRGBA16) {
195
d->transfoToRGBA16 = KoColorSpaceRegistry::instance()->colorConversionSystem()->createColorConverter(this, KoColorSpaceRegistry::instance()->rgb16("")) ;
195
d->transfoToRGBA16 = KoColorSpaceRegistry::instance()->colorConversionSystem()->createColorConverter(this, KoColorSpaceRegistry::instance()->rgb16(""), KoColorConversionTransformation::IntentPerceptual, KoColorConversionTransformation::BlackpointCompensation) ;
197
197
return d->transfoToRGBA16;
199
199
const KoColorConversionTransformation* KoColorSpace::fromRgbA16Converter() const
201
201
if (!d->transfoFromRGBA16) {
202
d->transfoFromRGBA16 = KoColorSpaceRegistry::instance()->colorConversionSystem()->createColorConverter(KoColorSpaceRegistry::instance()->rgb16("") , this) ;
202
d->transfoFromRGBA16 = KoColorSpaceRegistry::instance()->colorConversionSystem()->createColorConverter(KoColorSpaceRegistry::instance()->rgb16("") , this, KoColorConversionTransformation::IntentPerceptual, KoColorConversionTransformation::BlackpointCompensation) ;
204
204
return d->transfoFromRGBA16;
238
238
const KoColorSpace * dstColorSpace,
239
239
quint32 numPixels,
240
KoColorConversionTransformation::Intent renderingIntent) const
240
KoColorConversionTransformation::Intent renderingIntent,
241
KoColorConversionTransformation::ConversionFlags conversionFlags) const
242
243
if (*this == *dstColorSpace) {
243
244
memcpy(dst, src, numPixels * sizeof(quint8) * pixelSize());
245
KoCachedColorConversionTransformation cct = KoColorSpaceRegistry::instance()->colorConversionCache()->cachedConverter(this, dstColorSpace, renderingIntent);
246
KoCachedColorConversionTransformation cct = KoColorSpaceRegistry::instance()->colorConversionCache()->cachedConverter(this, dstColorSpace, renderingIntent, conversionFlags);
246
247
cct.transformation()->transform(src, dst, numPixels);
252
void KoColorSpace::bitBlt(quint8* dst,
254
const KoColorSpace* srcSpace,
257
const quint8* srcAlphaMask,
258
qint32 maskRowStride,
263
const QBitArray& channelFlags) const
265
if (d->compositeOps.contains(op)) {
266
bitBlt(dst, dststride, srcSpace, src, srcRowStride, srcAlphaMask, maskRowStride, opacity, rows, cols, d->compositeOps.value(op), channelFlags);
268
bitBlt(dst, dststride, srcSpace, src, srcRowStride, srcAlphaMask, maskRowStride, opacity, rows, cols, d->compositeOps.value(COMPOSITE_OVER), channelFlags);
273
void KoColorSpace::bitBlt(quint8* dst,
275
const KoColorSpace* srcSpace,
278
const quint8 *srcAlphaMask,
279
qint32 maskRowStride,
283
const KoCompositeOp* op,
284
const QBitArray& channelFlags) const
286
Q_ASSERT_X(*op->colorSpace() == *this, "KoColorSpace::bitBlt", QString("Composite op is for color space %1 (%2) while this is %3 (%4)").arg(op->colorSpace()->id()).arg(op->colorSpace()->profile()->name()).arg(id()).arg(profile()->name()).toLatin1());
288
if (rows <= 0 || cols <= 0)
291
if (!(*this == *srcSpace)) {
293
quint32 conversionBufferStride = cols * pixelSize();
294
QVector<quint8> * conversionCache =
295
threadLocalConversionCache(rows * conversionBufferStride);
297
quint8* conversionData = conversionCache->data();
299
for (qint32 row = 0; row < rows; row++) {
300
srcSpace->convertPixelsTo(src + row * srcRowStride,
301
conversionData + row * conversionBufferStride,
305
op->composite(dst, dstRowStride,
306
conversionData, conversionBufferStride,
307
srcAlphaMask, maskRowStride,
309
opacity, channelFlags);
311
op->composite(dst, dstRowStride,
313
srcAlphaMask, maskRowStride,
315
opacity, channelFlags);
320
void KoColorSpace::bitBlt(const KoColorSpace* srcSpace, const KoCompositeOp::ParameterInfo& params, const KoCompositeOp* op) const
322
Q_ASSERT_X(*op->colorSpace() == *this, "KoColorSpace::bitBlt", QString("Composite op is for color space %1 (%2) while this is %3 (%4)").arg(op->colorSpace()->id()).arg(op->colorSpace()->profile()->name()).arg(id()).arg(profile()->name()).toLatin1());
253
void KoColorSpace::bitBlt(const KoColorSpace* srcSpace, const KoCompositeOp::ParameterInfo& params, const KoCompositeOp* op,
254
KoColorConversionTransformation::Intent renderingIntent,
255
KoColorConversionTransformation::ConversionFlags conversionFlags) const
257
Q_ASSERT_X(*op->colorSpace() == *this, "KoColorSpace::bitBlt", QString("Composite op is for color space %1 (%2) while this is %3 (%4)").arg(op->colorSpace()->id()).arg(op->colorSpace()->profile()->name()).arg(id()).arg(profile()->name()).toLatin1());
324
259
if(params.rows <= 0 || params.cols <= 0)
327
262
if(!(*this == *srcSpace)) {
328
263
quint32 conversionBufferStride = params.cols * pixelSize();
329
264
QVector<quint8> * conversionCache = threadLocalConversionCache(params.rows * conversionBufferStride);
330
265
quint8* conversionData = conversionCache->data();
332
267
for(qint32 row=0; row<params.rows; row++) {
333
srcSpace->convertPixelsTo(params.srcRowStart + row*params.srcRowStride ,
334
conversionData + row*conversionBufferStride, this, params.cols);
268
srcSpace->convertPixelsTo(params.srcRowStart + row*params.srcRowStride,
269
conversionData + row*conversionBufferStride, this, params.cols,
270
renderingIntent, conversionFlags);
337
273
KoCompositeOp::ParameterInfo paramInfo(params);
338
274
paramInfo.srcRowStart = conversionData;
339
275
paramInfo.srcRowStride = conversionBufferStride;