Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 80d3dd6

Browse files
therahedwigdimula73
authored andcommitted
Switch proof to LCMS extendedTransform when BCP is active in display CMS settings.
Softproofing transform only toggles BCP for the first of the two transforms, which sometimes leads to confusion when compared to an image converted to CMYK with the BCP toggled in the settings.
1 parent a8f6289 commit 80d3dd6

File tree

7 files changed

+54
-29
lines changed

7 files changed

+54
-29
lines changed

libs/pigment/KoColorConversionTransformationAbstractFactory.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ class KRITAPIGMENT_EXPORT KoColorConversionTransformationAbstractFactory
3939
KoColorProofingConversionTransformation::Intent proofingIntent,
4040
KoColorProofingConversionTransformation::ConversionFlags conversionFlags,
4141
quint8 *gamutWarning,
42-
double adaptationState) const
42+
double adaptationState,
43+
KoColorConversionTransformation::ConversionFlags displayConversionFlags) const
4344
{
4445
Q_UNUSED(srcColorSpace);
4546
Q_UNUSED(dstColorSpace);
@@ -49,6 +50,7 @@ class KRITAPIGMENT_EXPORT KoColorConversionTransformationAbstractFactory
4950
Q_UNUSED(conversionFlags);
5051
Q_UNUSED(gamutWarning);
5152
Q_UNUSED(adaptationState);
53+
Q_UNUSED(displayConversionFlags);
5254
qFatal("createColorProofingTransform undefined.");
5355
return 0;
5456
}

libs/pigment/KoColorSpace.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -476,14 +476,14 @@ bool KoColorSpace::convertPixelsTo(const quint8 * src,
476476
return true;
477477
}
478478

479-
KoColorConversionTransformation * KoColorSpace::createProofingTransform(const KoColorSpace *dstColorSpace, const KoColorSpace *proofingSpace, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::Intent proofingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags, quint8 *gamutWarning, double adaptationState) const
479+
KoColorConversionTransformation * KoColorSpace::createProofingTransform(const KoColorSpace *dstColorSpace, const KoColorSpace *proofingSpace, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::Intent proofingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags, quint8 *gamutWarning, double adaptationState, KoColorConversionTransformation::ConversionFlags displayConversionFlags) const
480480
{
481481
if (!d->iccEngine) {
482482
d->iccEngine = KoColorSpaceEngineRegistry::instance()->get("icc");
483483
}
484484
if (!d->iccEngine) return 0;
485485

486-
return d->iccEngine->createColorProofingTransformation(this, dstColorSpace, proofingSpace, renderingIntent, proofingIntent, conversionFlags, gamutWarning, adaptationState);
486+
return d->iccEngine->createColorProofingTransformation(this, dstColorSpace, proofingSpace, renderingIntent, proofingIntent, conversionFlags, gamutWarning, adaptationState, displayConversionFlags);
487487
}
488488

489489
bool KoColorSpace::proofPixelsTo(const quint8 *src,

libs/pigment/KoColorSpace.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,8 @@ class KRITAPIGMENT_EXPORT KoColorSpace : public boost::equality_comparable<KoCol
399399
KoColorConversionTransformation::Intent renderingIntent,
400400
KoColorConversionTransformation::Intent proofingIntent,
401401
KoColorConversionTransformation::ConversionFlags conversionFlags,
402-
quint8 *gamutWarning, double adaptationState) const;
402+
quint8 *gamutWarning, double adaptationState,
403+
KoColorConversionTransformation::ConversionFlags displayConversionFlags) const;
403404
/**
404405
* @brief proofPixelsTo
405406
* @param src source

libs/ui/opengl/KisOpenGLUpdateInfoBuilder.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ KisOpenGLUpdateInfoSP KisOpenGLUpdateInfoBuilder::buildUpdateInfo(const QRect &r
8383
m_d->proofingConfig->intent,
8484
m_d->proofingConfig->conversionFlags,
8585
m_d->proofingConfig->warningColor,
86-
m_d->proofingConfig->adaptationState));
86+
m_d->proofingConfig->adaptationState,
87+
m_d->conversionOptions.m_conversionFlags));
8788
}
8889
}
8990

libs/ui/opengl/kis_texture_tile_update_info.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,10 @@ class KisTextureTileUpdateInfo
223223
KoColorConversionTransformation::Intent proofingIntent,
224224
KoColorConversionTransformation::ConversionFlags conversionFlags,
225225
KoColor gamutWarning,
226-
double adaptationState)
226+
double adaptationState,
227+
KoColorConversionTransformation::ConversionFlags displayConversionFlags)
227228
{
228-
return srcCS->createProofingTransform(dstCS, proofingSpace, renderingIntent, proofingIntent, conversionFlags, gamutWarning.data(), adaptationState);
229+
return srcCS->createProofingTransform(dstCS, proofingSpace, renderingIntent, proofingIntent, conversionFlags, gamutWarning.data(), adaptationState, displayConversionFlags);
229230
}
230231

231232
inline quint8* data() const {

plugins/color/lcms2engine/IccColorSpaceEngine.cpp

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ class KoLcmsColorProofingConversionTransformation : public KoColorProofingConver
7575
Intent proofingIntent,
7676
ConversionFlags conversionFlags,
7777
quint8 *gamutWarning,
78-
double adaptationState
78+
double adaptationState,
79+
ConversionFlags displayConversionFlags
7980
)
8081
: KoColorProofingConversionTransformation(srcCs, dstCs, proofingSpace, renderingIntent, proofingIntent, conversionFlags, gamutWarning, adaptationState)
8182
, m_transform(0)
@@ -84,14 +85,10 @@ class KoLcmsColorProofingConversionTransformation : public KoColorProofingConver
8485
Q_ASSERT(dstCs);
8586
Q_ASSERT(renderingIntent < 4);
8687

87-
if (srcCs->colorDepthId() == Integer8BitsColorDepthID
88-
|| srcCs->colorDepthId() == Integer16BitsColorDepthID) {
88+
if ((srcProfile->isLinear() || dstProfile->isLinear()) &&
89+
!conversionFlags.testFlag(KoColorConversionTransformation::NoOptimization)) {
8990

90-
if ((srcProfile->name().contains(QLatin1String("linear"), Qt::CaseInsensitive) ||
91-
dstProfile->name().contains(QLatin1String("linear"), Qt::CaseInsensitive)) &&
92-
!conversionFlags.testFlag(KoColorConversionTransformation::NoOptimization)) {
93-
conversionFlags |= KoColorConversionTransformation::NoOptimization;
94-
}
91+
conversionFlags |= KoColorConversionTransformation::NoOptimization;
9592
}
9693
conversionFlags |= KoColorConversionTransformation::CopyAlpha;
9794

@@ -100,18 +97,37 @@ class KoLcmsColorProofingConversionTransformation : public KoColorProofingConver
10097
alarm[1] = (cmsUInt16Number)gamutWarning[1]*256;
10198
alarm[2] = (cmsUInt16Number)gamutWarning[0]*256;
10299
cmsSetAlarmCodes(alarm);
103-
cmsSetAdaptationState(adaptationState);
100+
104101

105102
KIS_ASSERT(dynamic_cast<const IccColorProfile *>(proofingSpace->profile()));
106-
m_transform = cmsCreateProofingTransform(srcProfile->lcmsProfile(),
107-
srcColorSpaceType,
108-
dstProfile->lcmsProfile(),
109-
dstColorSpaceType,
110-
dynamic_cast<const IccColorProfile *>(proofingSpace->profile())->asLcms()->lcmsProfile(),
111-
renderingIntent,
112-
proofingIntent,
113-
conversionFlags);
114-
cmsSetAdaptationState(1);
103+
104+
if (displayConversionFlags.testFlag(KoColorConversionTransformation::BlackpointCompensation)) {
105+
// This more or less does the same thing as cmsCreateProofingTransform in LCMS' cmsxform.c file,
106+
// except we try to enable blackpoint compentation on the second bcp too.
107+
cmsHPROFILE proof = dynamic_cast<const IccColorProfile *>(proofingSpace->profile())->asLcms()->lcmsProfile();
108+
cmsHPROFILE profiles[] = {srcProfile->lcmsProfile(),
109+
proof,
110+
proof,
111+
dstProfile->lcmsProfile()};
112+
bool doBCP1 = conversionFlags.testFlag(KoColorConversionTransformation::BlackpointCompensation);
113+
bool doBCP2 = true; //displayConversionFlags.testFlag(KoColorConversionTransformation::BlackpointCompensation);
114+
cmsBool bcp[] = {doBCP1, doBCP1, doBCP2, doBCP2};
115+
cmsUInt32Number intents[] = {renderingIntent, renderingIntent, INTENT_RELATIVE_COLORIMETRIC, proofingIntent};
116+
cmsFloat64Number adaptation[] = {adaptationState, adaptationState, adaptationState, adaptationState};
117+
m_transform = cmsCreateExtendedTransform(cmsGetProfileContextID(srcProfile->lcmsProfile()), 4, profiles, bcp, intents, adaptation, proof, 1, srcColorSpaceType, dstColorSpaceType, conversionFlags);
118+
} else {
119+
cmsSetAdaptationState(adaptationState);
120+
m_transform = cmsCreateProofingTransform(srcProfile->lcmsProfile(),
121+
srcColorSpaceType,
122+
dstProfile->lcmsProfile(),
123+
dstColorSpaceType,
124+
dynamic_cast<const IccColorProfile *>(proofingSpace->profile())->asLcms()->lcmsProfile(),
125+
renderingIntent,
126+
proofingIntent,
127+
conversionFlags);
128+
cmsSetAdaptationState(1);
129+
}
130+
115131

116132
Q_ASSERT(m_transform);
117133
}
@@ -266,7 +282,8 @@ KoColorProofingConversionTransformation *IccColorSpaceEngine::createColorProofin
266282
KoColorConversionTransformation::Intent proofingIntent,
267283
KoColorConversionTransformation::ConversionFlags conversionFlags,
268284
quint8 *gamutWarning,
269-
double adaptationState) const
285+
double adaptationState,
286+
KoColorConversionTransformation::ConversionFlags displayConversionFlags) const
270287
{
271288
KIS_ASSERT(srcColorSpace);
272289
KIS_ASSERT(dstColorSpace);
@@ -277,7 +294,7 @@ KoColorProofingConversionTransformation *IccColorSpaceEngine::createColorProofin
277294
srcColorSpace, computeColorSpaceType(srcColorSpace),
278295
dynamic_cast<const IccColorProfile *>(srcColorSpace->profile())->asLcms(), dstColorSpace, computeColorSpaceType(dstColorSpace),
279296
dynamic_cast<const IccColorProfile *>(dstColorSpace->profile())->asLcms(), proofingSpace, renderingIntent, proofingIntent, conversionFlags, gamutWarning,
280-
adaptationState
297+
adaptationState, displayConversionFlags
281298
);
282299
}
283300

plugins/color/lcms2engine/IccColorSpaceEngine.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,11 @@ class IccColorSpaceEngine : public KoColorSpaceEngine
2525
KoColorProofingConversionTransformation *createColorProofingTransformation(const KoColorSpace *srcColorSpace,
2626
const KoColorSpace *dstColorSpace,
2727
const KoColorSpace *proofingSpace,
28-
KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::Intent proofingIntent,
29-
KoColorConversionTransformation::ConversionFlags conversionFlags, quint8 *gamutWarning, double adaptationState) const override;
28+
KoColorConversionTransformation::Intent renderingIntent,
29+
KoColorConversionTransformation::Intent proofingIntent,
30+
KoColorConversionTransformation::ConversionFlags conversionFlags,
31+
quint8 *gamutWarning, double adaptationState,
32+
KoColorConversionTransformation::ConversionFlags displayConversionFlags) const override;
3033
quint32 computeColorSpaceType(const KoColorSpace *cs) const;
3134

3235
bool supportsColorSpace(const QString& colorModelId, const QString& colorDepthId, const KoColorProfile *profile) const override;

0 commit comments

Comments
 (0)