save provisory work
This commit is contained in:
parent
ceca81d193
commit
5e4ed74932
@ -38,7 +38,6 @@
|
||||
#include "../rtgui/threadutils.h"
|
||||
|
||||
#include "cJSON.h"
|
||||
|
||||
namespace rtengine
|
||||
{
|
||||
|
||||
@ -1377,6 +1376,8 @@ cmsHPROFILE rtengine::ICCStore::createGammaProfile(const procparams::ColorManage
|
||||
cmsWhitePointFromTemp(&xyD,(double)temp);
|
||||
GammaTRC[0] = GammaTRC[1] = GammaTRC[2] = cmsBuildParametricToneCurve(nullptr, 5, Parameters); //5 = smoother than 4
|
||||
cmsHPROFILE oprofdef = cmsCreateRGBProfile(&xyD, &Primaries, GammaTRC); //oprofdef become Outputprofile
|
||||
//cmsSetProfileVersion(oprofdef, 4.3);
|
||||
|
||||
cmsFreeToneCurve(GammaTRC[0]);
|
||||
//lcmsMutex->unlock();
|
||||
|
||||
@ -1389,7 +1390,8 @@ cmsHPROFILE rtengine::ICCStore::createCustomGammaOutputProfile(const procparams:
|
||||
bool pro = false;
|
||||
Glib::ustring outProfile;
|
||||
cmsHPROFILE outputProfile = nullptr;
|
||||
|
||||
|
||||
|
||||
if (icm.freegamma && icm.gampos < 1.35) {
|
||||
pro = true; //select profil with gammaTRC modified :
|
||||
} else if (icm.gamma == "linear_g1.0" ||(icm.gamma == "High_g1.3_s3.35")) {
|
||||
@ -1518,15 +1520,11 @@ cmsHPROFILE rtengine::ICCStore::createCustomGammaOutputProfile(const procparams:
|
||||
std::wstring gammaStrICC;
|
||||
|
||||
gammaWs.precision(6);
|
||||
// gammaWs << "Manual GammaTRC: g=" <<(float)icm.gampos << " s=" <<(float)icm.slpos;
|
||||
//Glib::ustring outPro;
|
||||
outPro = outProfile + "_FOIP"+ std::to_string((float)icm.gampos)+" "+ std::to_string((float)icm.slpos) + ".icc";
|
||||
|
||||
gammaWs << outPro.c_str() <<(float)icm.gampos << " s=" <<(float)icm.slpos;
|
||||
|
||||
cmsMLUsetWide(mlu, "en", "US", gammaWs.str().c_str());
|
||||
|
||||
// cmsSaveProfileToFile(outputProfile, outPro.c_str());
|
||||
|
||||
}
|
||||
|
||||
@ -1540,16 +1538,98 @@ cmsHPROFILE rtengine::ICCStore::createCustomGammaOutputProfile(const procparams:
|
||||
|
||||
cmsMLUfree(mlu);
|
||||
}
|
||||
cmsSetProfileVersion(outputProfile, 4.3);
|
||||
//change
|
||||
enum class ColorTemp {
|
||||
D50 = 5003, // for Widegamut, Prophoto Best, Beta -> D50
|
||||
D65 = 6504 // for sRGB, AdobeRGB, Bruce Rec2020 -> D65
|
||||
};
|
||||
ColorTemp temp = ColorTemp::D50;
|
||||
float p[6]; //primaries
|
||||
|
||||
if (icm.wprimari == "WideGamut") {
|
||||
p[0] = 0.7350; //Widegamut primaries
|
||||
p[1] = 0.2650;
|
||||
p[2] = 0.1150;
|
||||
p[3] = 0.8260;
|
||||
p[4] = 0.1570;
|
||||
p[5] = 0.0180;
|
||||
} else if (icm.wprimari == "Adobe RGB") {
|
||||
p[0] = 0.6400; //Adobe primaries
|
||||
p[1] = 0.3300;
|
||||
p[2] = 0.2100;
|
||||
p[3] = 0.7100;
|
||||
p[4] = 0.1500;
|
||||
p[5] = 0.0600;
|
||||
temp = ColorTemp::D65;
|
||||
} else if (icm.wprimari == "sRGB") {
|
||||
p[0] = 0.6400; // sRGB primaries
|
||||
p[1] = 0.3300;
|
||||
p[2] = 0.3000;
|
||||
p[3] = 0.6000;
|
||||
p[4] = 0.1500;
|
||||
p[5] = 0.0600;
|
||||
temp = ColorTemp::D65;
|
||||
} else if (icm.wprimari == "BruceRGB") {
|
||||
p[0] = 0.6400; // Bruce primaries
|
||||
p[1] = 0.3300;
|
||||
p[2] = 0.2800;
|
||||
p[3] = 0.6500;
|
||||
p[4] = 0.1500;
|
||||
p[5] = 0.0600;
|
||||
temp = ColorTemp::D65;
|
||||
} else if (icm.wprimari == "Beta RGB") {
|
||||
p[0] = 0.6888; // Beta primaries
|
||||
p[1] = 0.3112;
|
||||
p[2] = 0.1986;
|
||||
p[3] = 0.7551;
|
||||
p[4] = 0.1265;
|
||||
p[5] = 0.0352;
|
||||
} else if (icm.wprimari == "BestRGB") {
|
||||
p[0] = 0.7347; // Best primaries
|
||||
p[1] = 0.2653;
|
||||
p[2] = 0.2150;
|
||||
p[3] = 0.7750;
|
||||
p[4] = 0.1300;
|
||||
p[5] = 0.0350;
|
||||
} else if (icm.wprimari == "Rec2020") {
|
||||
p[0] = 0.7080; // Rec2020 primaries
|
||||
p[1] = 0.2920;
|
||||
p[2] = 0.1700;
|
||||
p[3] = 0.7970;
|
||||
p[4] = 0.1310;
|
||||
p[5] = 0.0460;
|
||||
temp = ColorTemp::D65;
|
||||
} else {
|
||||
p[0] = 0.7347; //ProPhoto and default primaries
|
||||
p[1] = 0.2653;
|
||||
p[2] = 0.1596;
|
||||
p[3] = 0.8404;
|
||||
p[4] = 0.0366;
|
||||
p[5] = 0.0001;
|
||||
}
|
||||
|
||||
cmsCIExyY xyD;
|
||||
cmsCIExyYTRIPLE Primaries = {
|
||||
{p[0], p[1], 1.0}, // red
|
||||
{p[2], p[3], 1.0}, // green
|
||||
{p[4], p[5], 1.0} // blue
|
||||
};
|
||||
|
||||
cmsWhitePointFromTemp(&xyD,(double)temp);
|
||||
cmsToneCurve* GammaTRC[3];
|
||||
|
||||
|
||||
// Calculate output profile's rTRC gTRC bTRC
|
||||
cmsToneCurve* GammaTRC = cmsBuildParametricToneCurve(nullptr, 5, Parameters);
|
||||
cmsWriteTag(outputProfile, cmsSigRedTRCTag,(void*)GammaTRC );
|
||||
cmsWriteTag(outputProfile, cmsSigGreenTRCTag,(void*)GammaTRC );
|
||||
cmsWriteTag(outputProfile, cmsSigBlueTRCTag,(void*)GammaTRC );
|
||||
cmsSaveProfileToFile(outputProfile, outPro.c_str());
|
||||
GammaTRC[0] = GammaTRC[1] = GammaTRC[2] = cmsBuildParametricToneCurve(nullptr, 5, Parameters);
|
||||
outputProfile = cmsCreateRGBProfile(&xyD, &Primaries, GammaTRC);
|
||||
cmsWriteTag(outputProfile, cmsSigRedTRCTag,GammaTRC[0] );
|
||||
cmsWriteTag(outputProfile, cmsSigGreenTRCTag,GammaTRC[1] );
|
||||
cmsWriteTag(outputProfile, cmsSigBlueTRCTag,GammaTRC[2] );
|
||||
cmsSaveProfileToFile(outputProfile, outPro.c_str());
|
||||
|
||||
if (GammaTRC) {
|
||||
cmsFreeToneCurve(GammaTRC);
|
||||
cmsFreeToneCurve(GammaTRC[0]);
|
||||
}
|
||||
|
||||
return outputProfile;
|
||||
|
Loading…
x
Reference in New Issue
Block a user