fixed bug in discriminating between matrix and lut profiles for the OOG check

This commit is contained in:
Alberto Griggio
2018-03-17 22:54:48 +01:00
parent 956c44905e
commit 17dc4af424
3 changed files with 8 additions and 4 deletions

View File

@@ -24,15 +24,16 @@
*/
#include "gamutwarning.h"
#include <iostream>
namespace rtengine {
GamutWarning::GamutWarning(cmsHPROFILE iprof, cmsHPROFILE gamutprof, bool gamutbpc):
GamutWarning::GamutWarning(cmsHPROFILE iprof, cmsHPROFILE gamutprof, RenderingIntent intent, bool gamutbpc):
lab2ref(nullptr),
lab2softproof(nullptr),
softproof2ref(nullptr)
{
if (cmsIsMatrixShaper(gamutprof)) {
if (cmsIsMatrixShaper(gamutprof) && !cmsIsCLUT(gamutprof, intent, LCMS_USED_AS_OUTPUT)) {
cmsHPROFILE aces = ICCStore::getInstance()->getProfile("ACES");
if (aces) {
lab2ref = cmsCreateTransform(iprof, TYPE_Lab_FLT, aces, TYPE_RGB_FLT, INTENT_ABSOLUTE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE);

View File

@@ -33,7 +33,7 @@ namespace rtengine {
class GamutWarning: public NonCopyable {
public:
GamutWarning(cmsHPROFILE iprof, cmsHPROFILE gamutprof, bool bpc);
GamutWarning(cmsHPROFILE iprof, cmsHPROFILE gamutprof, RenderingIntent intent, bool bpc);
~GamutWarning();
void markLine(Image8 *image, int y, float *srcbuf, float *buf1, float *buf2);

View File

@@ -298,6 +298,7 @@ void ImProcFunctions::updateColorProfiles (const Glib::ustring& monitorProfile,
cmsHPROFILE iprof = cmsCreateLab4Profile (nullptr);
cmsHPROFILE gamutprof = nullptr;
cmsUInt32Number gamutbpc = 0;
RenderingIntent gamutintent = RI_RELATIVE;
bool softProofCreated = false;
@@ -345,6 +346,7 @@ void ImProcFunctions::updateColorProfiles (const Glib::ustring& monitorProfile,
if (params->icm.outputBPC) {
gamutbpc = cmsFLAGS_BLACKPOINTCOMPENSATION;
}
gamutintent = outIntent;
}
}
} else if (gamutCheck) {
@@ -362,6 +364,7 @@ void ImProcFunctions::updateColorProfiles (const Glib::ustring& monitorProfile,
if (settings->monitorBPC) {
gamutbpc = cmsFLAGS_BLACKPOINTCOMPENSATION;
}
gamutintent = monitorIntent;
}
if (!softProofCreated) {
@@ -375,7 +378,7 @@ void ImProcFunctions::updateColorProfiles (const Glib::ustring& monitorProfile,
}
if (gamutCheck) {
gamutWarning.reset(new GamutWarning(iprof, gamutprof, gamutbpc));
gamutWarning.reset(new GamutWarning(iprof, gamutprof, gamutintent, gamutbpc));
}
cmsCloseProfile (iprof);