various improvments to ICC Profile Creator

This commit is contained in:
U-PC-BUREAU\jacques
2018-11-12 12:46:33 +01:00
parent c5c04769e4
commit d55d3446f6
19 changed files with 151 additions and 53 deletions

View File

@@ -668,11 +668,13 @@ void ICCProfileCreator::savePressed()
// -----------------setmedia white point for monitor profile sRGB or AdobeRGB in case of profile used for monitor---------------------
//instead of calculations made by LCMS..small differences
v2except = (profileVersion == "v2" && (primariesPreset == "sRGB" || primariesPreset == "Adobe") && illuminant == "DEF");
v2except = (profileVersion == "v2" && (primariesPreset == "sRGB" || primariesPreset == "Adobe" || primariesPreset == "Rec2020" || primariesPreset == "BruceRGB" || primariesPreset == "ACES-AP1" || primariesPreset == "ACES-AP0") && illuminant == "DEF");
//necessary for V2 profile
if (!v2except) {
std::string is_RTv4 = "";
if (primariesPreset == "ACES-AP0" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.ACESp0)) {
sNewProfile = options.rtSettings.ACESp0;
sPrimariesPreset = "ACES-AP0";
@@ -683,7 +685,14 @@ void ICCProfileCreator::savePressed()
sNewProfile = options.rtSettings.adobe;
sPrimariesPreset = "Medium";
} else if (primariesPreset == "ProPhoto" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.prophoto)) {
is_RTv4 = options.rtSettings.prophoto.substr(0, 4);
if (is_RTv4 == "RTv4") {
options.rtSettings.prophoto = "RTv2_Large";
};
sNewProfile = options.rtSettings.prophoto;
sPrimariesPreset = "Large";
} else if (primariesPreset == "Rec2020" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.rec2020)) {
sNewProfile = options.rtSettings.rec2020;
@@ -692,13 +701,33 @@ void ICCProfileCreator::savePressed()
sNewProfile = options.rtSettings.srgb;
sPrimariesPreset = "sRGB";
} else if (primariesPreset == "Widegamut" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.widegamut)) {
is_RTv4 = options.rtSettings.widegamut.substr(0, 4);
if (is_RTv4 == "RTv4") {
options.rtSettings.widegamut = "RTv2_Wide";
};
sNewProfile = options.rtSettings.widegamut;
sPrimariesPreset = "Wide";
} else if (primariesPreset == "BestRGB" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.best)) {
is_RTv4 = options.rtSettings.best.substr(0, 4);
if (is_RTv4 == "RTv4") {
options.rtSettings.best = "RTv2_Best";
};
sNewProfile = options.rtSettings.best;
sPrimariesPreset = "Best";
} else if (primariesPreset == "BetaRGB" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.beta)) {
sNewProfile = options.rtSettings.beta;
is_RTv4 = options.rtSettings.beta.substr(0, 4);
if (is_RTv4 == "RTv4") {
options.rtSettings.widegamut = "RTv2_Beta";
};
sPrimariesPreset = "Beta";
} else if (primariesPreset == "BruceRGB" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.bruce)) {
sNewProfile = options.rtSettings.bruce;
@@ -715,7 +744,22 @@ void ICCProfileCreator::savePressed()
return;
}
} else {
sNewProfile = "RTv2_Beta";
//new model for v2 profile different from D50 by entering directly XYZ values and media white point
sNewProfile = "RTv2_Beta";//for copy
if (primariesPreset == "ACES-AP0") {
sPrimariesPreset = "ACES-AP0";
} else if (primariesPreset == "ACES-AP1") {
sPrimariesPreset = "ACES-AP1";
} else if (primariesPreset == "Adobe") {
sPrimariesPreset = "Medium";
} else if (primariesPreset == "Rec2020") {
sPrimariesPreset = "Rec2020";
} else if (primariesPreset == "BruceRGB") {
sPrimariesPreset = "Bruce";
} else if (primariesPreset == "sRGB") {
sPrimariesPreset = "sRGB";
}
}
//begin adaptation rTRC gTRC bTRC
@@ -957,16 +1001,30 @@ void ICCProfileCreator::savePressed()
}
cmsWhitePointFromTemp(&xyD, tempv4);
if (illuminant == "D65") {
xyD = {0.312700492, 0.329000939};
}
if (illuminant == "D60") {
xyD = {0.32168, 0.33767};
}
} else {
if (v2except) {
cmsCIExyY XYZ;
{
// XYZ = {0.950486322, 1.0, 1.08902736};//White D65 point calculated from white point xy 0,312710 y 0,3290
// XYZ = {0.95047, 1.0, 1.088830};//White D65 point from B.Lindbloom
XYZ = {0.95045471, 1.0, 1.08905029};
XYZ = {0.95045471, 1.0, 1.08905029};//white D65
}
if (primariesPreset == "ACES-AP1" || primariesPreset == "ACES-AP0") {
XYZ = {0.952646075, 1.0, 1.008825184};//white D60
}
cmsCIExyY blackpoint;
{
@@ -981,16 +1039,6 @@ void ICCProfileCreator::savePressed()
if (primariesPreset == "sRGB") {
//Matrix value from B.Lindbloom
/*
rt = {0.4360747, 0.2225045, 0.0139322};
cmsWriteTag(profile_v2_except, cmsSigRedColorantTag, &rt);
bt = {0.1430804, 0.0606169, 0.7141733};
cmsWriteTag(profile_v2_except, cmsSigBlueColorantTag, &bt);
gt = {0.3850649, 0.7168786, 0.0971045};
cmsWriteTag(profile_v2_except, cmsSigGreenColorantTag, &gt);
}
*/
{
//Matrix value from spec Adobe
rt = {0.43607, 0.22249, 0.01392};
@@ -1005,17 +1053,6 @@ void ICCProfileCreator::savePressed()
}
if (primariesPreset == "Adobe") {
{
//B.Lindbloom
/*
rt = {0.6097559, 0.3111242, 0.0194811};
cmsWriteTag(profile_v2_except, cmsSigRedColorantTag, &rt);
bt = {0.1492240, 0.0632197, 0.7448387};
cmsWriteTag(profile_v2_except, cmsSigBlueColorantTag, &bt);
gt = {0.2052401, 0.6256560, 0.0608902};
cmsWriteTag(profile_v2_except, cmsSigGreenColorantTag, &gt);
*/
}
{
//Adobe spec
rt = {0.60974, 0.31111, 0.01947};
@@ -1027,6 +1064,50 @@ void ICCProfileCreator::savePressed()
}
}
if (primariesPreset == "Rec2020") {
{
rt = {0.67337, 0.27901, -0.00192};
cmsWriteTag(profile_v2_except, cmsSigRedColorantTag, &rt);
bt = {0.12506, 0.04561, 0.79686};
cmsWriteTag(profile_v2_except, cmsSigBlueColorantTag, &bt);
gt = {0.16577, 0.67538, 0.02997};
cmsWriteTag(profile_v2_except, cmsSigGreenColorantTag, &gt);
}
}
if (primariesPreset == "BruceRGB") {
{
rt = {0.49400, 0.25204, 0.01578};
cmsWriteTag(profile_v2_except, cmsSigRedColorantTag, &rt);
bt = {0.14949, 0.06332, 0.74617};
cmsWriteTag(profile_v2_except, cmsSigBlueColorantTag, &bt);
gt = {0.32071, 0.68463, 0.06294};
cmsWriteTag(profile_v2_except, cmsSigGreenColorantTag, &gt);
}
}
if (primariesPreset == "ACES-AP0") {
{
rt = {0.99084, 0.36192, -0.00272};
cmsWriteTag(profile_v2_except, cmsSigRedColorantTag, &rt);
bt = {-0.03900, -0.08443, 0.81938};
cmsWriteTag(profile_v2_except, cmsSigBlueColorantTag, &bt);
gt = {0.01236, 0.72250, 0.00824};
cmsWriteTag(profile_v2_except, cmsSigGreenColorantTag, &gt);
}
}
if (primariesPreset == "ACES-AP1") {
{
rt = {0.68970, 0.28445, -0.00604};
cmsWriteTag(profile_v2_except, cmsSigRedColorantTag, &rt);
bt = {0.12456, 0.04379, 0.82094};
cmsWriteTag(profile_v2_except, cmsSigBlueColorantTag, &bt);
gt = {0.14995, 0.67175, 0.00999};
cmsWriteTag(profile_v2_except, cmsSigGreenColorantTag, &gt);
}
}
} else {
cmsWhitePointFromTemp(&xyD, (double)temp);
}
@@ -1036,6 +1117,14 @@ void ICCProfileCreator::savePressed()
xyD = {0.447573, 0.407440, 1.0};
}
if (illuminant == "D65") {
xyD = {0.312700492, 0.329000939};
}
if (illuminant == "D60") {
xyD = {0.32168, 0.33767};
}
// Calculate output profile's rTRC gTRC bTRC
@@ -1046,7 +1135,7 @@ void ICCProfileCreator::savePressed()
}
if (gammaPreset == "standard_g2.2") {
GammaTRC[0] = GammaTRC[1] = GammaTRC[2] = cmsBuildGamma(NULL, 2.19921875);
GammaTRC[0] = GammaTRC[1] = GammaTRC[2] = cmsBuildGamma(NULL, 2.19921875);//spec Adobe
}
if (gammaPreset == "standard_g1.8") {
@@ -1176,6 +1265,7 @@ void ICCProfileCreator::savePressed()
}
}
}
} else if (cmsMLUsetWide(descMLU, "en", "US", wDescription.str().c_str())) {
if (!v2except) {

View File

@@ -551,16 +551,16 @@ void Options::setDefaults()
rtSettings.monitorIntent = rtengine::RI_RELATIVE;
rtSettings.monitorBPC = true;
rtSettings.autoMonitorProfile = false;
rtSettings.adobe = "RTv4_Medium"; // put the name of yours profiles (here windows)
rtSettings.prophoto = "RTv4_Large"; // these names appear in the menu "output profile"
rtSettings.widegamut = "RTv4_Wide";
rtSettings.srgb = "RTv4_sRGB";
rtSettings.bruce = "RTv4_Bruce";
rtSettings.beta = "RTv4_Beta";
rtSettings.best = "RTv4_Best";
rtSettings.rec2020 = "RTv4_Rec2020";
rtSettings.ACESp0 = "RTv4_ACES-AP0";
rtSettings.ACESp1 = "RTv4_ACES-AP1";
rtSettings.adobe = "RTv2_Medium"; // put the name of yours profiles (here windows)
rtSettings.prophoto = "RTv2_Large"; // these names appear in the menu "output profile"
rtSettings.widegamut = "RTv2_Wide";
rtSettings.srgb = "RTv2_sRGB";
rtSettings.bruce = "RTv2_Bruce";
rtSettings.beta = "RTv2_Beta";
rtSettings.best = "RTv2_Best";
rtSettings.rec2020 = "RTv2_Rec2020";
rtSettings.ACESp0 = "RTv2_ACES-AP0";
rtSettings.ACESp1 = "RTv2_ACES-AP1";
rtSettings.verbose = false;
rtSettings.gamutICC = true;
rtSettings.gamutLch = true;
@@ -1442,66 +1442,74 @@ void Options::readFromFile(Glib::ustring fname)
if (keyFile.has_key("Color Management", "AdobeRGB")) {
rtSettings.adobe = keyFile.get_string("Color Management", "AdobeRGB");
if (rtSettings.adobe == "RT_Medium_gsRGB") {
rtSettings.adobe = "RTv4_Medium";
if (rtSettings.adobe == "RT_Medium_gsRGB" || rtSettings.adobe == "RTv4_Medium") {
rtSettings.adobe = "RTv2_Medium";
}
}
if (keyFile.has_key("Color Management", "ProPhoto")) {
rtSettings.prophoto = keyFile.get_string("Color Management", "ProPhoto");
if (rtSettings.prophoto == "RT_Large_gBT709") {
rtSettings.prophoto = "RTv4_Large";
if (rtSettings.prophoto == "RT_Large_gBT709" || rtSettings.prophoto == "RTv4_Large") {
rtSettings.prophoto = "RTv2_Large";
}
}
if (keyFile.has_key("Color Management", "WideGamut")) {
rtSettings.widegamut = keyFile.get_string("Color Management", "WideGamut");
if (rtSettings.widegamut == "WideGamutRGB") {
rtSettings.widegamut = "RTv4_Wide";
if (rtSettings.widegamut == "WideGamutRGB" || rtSettings.widegamut == "RTv4_Wide") {
rtSettings.widegamut = "RTv2_Wide";
}
}
if (keyFile.has_key("Color Management", "sRGB")) {
rtSettings.srgb = keyFile.get_string("Color Management", "sRGB");
if (rtSettings.srgb == "RT_sRGB") {
rtSettings.srgb = "RTv4_sRGB";
if (rtSettings.srgb == "RT_sRGB" || rtSettings.srgb == "RTv4_sRGB") {
rtSettings.srgb = "RTv2_sRGB";
}
}
if (keyFile.has_key("Color Management", "Beta")) {
rtSettings.beta = keyFile.get_string("Color Management", "Beta");
if (rtSettings.beta == "BetaRGB") {
rtSettings.beta = "RTv4_Beta";
if (rtSettings.beta == "BetaRGB" || rtSettings.beta == "RTv4_Beta") {
rtSettings.beta = "RTv2_Beta";
}
}
if (keyFile.has_key("Color Management", "Best")) {
rtSettings.best = keyFile.get_string("Color Management", "Best");
if (rtSettings.best == "BestRGB") {
rtSettings.best = "RTv4_Best";
if (rtSettings.best == "BestRGB" || rtSettings.best == "RTv4_Best") {
rtSettings.best = "RTv2_Best";
}
}
if (keyFile.has_key("Color Management", "Rec2020")) {
rtSettings.rec2020 = keyFile.get_string("Color Management", "Rec2020");
if (rtSettings.rec2020 == "Rec2020") {
rtSettings.rec2020 = "RTv4_Rec2020";
if (rtSettings.rec2020 == "Rec2020" || rtSettings.rec2020 == "RTv4_Rec2020") {
rtSettings.rec2020 = "RTv2_Rec2020";
}
}
if (keyFile.has_key("Color Management", "Bruce")) {
rtSettings.bruce = keyFile.get_string("Color Management", "Bruce");
if (rtSettings.bruce == "Bruce") {
rtSettings.bruce = "RTv4_Bruce";
if (rtSettings.bruce == "Bruce" || rtSettings.bruce == "RTv4_Bruce") {
rtSettings.bruce = "RTv2_Bruce";
}
}
if (keyFile.has_key("Color Management", "ACES-AP0")) {
rtSettings.ACESp0 = keyFile.get_string("Color Management", "ACES-AP0");
if (rtSettings.ACESp0 == "RTv4_ACES-AP0") {
rtSettings.ACESp0 = "RTv2_ACES-AP0";
}
}
if (keyFile.has_key("Color Management", "ACES-AP1")) {
rtSettings.ACESp1 = keyFile.get_string("Color Management", "ACES-AP1");
if (rtSettings.ACESp1 == "RTv4_ACES-AP1") {
rtSettings.ACESp1 = "RTv2_ACES-AP1";
}
}
if (keyFile.has_key("Color Management", "GamutLch")) {