QColor ScColorEngine::getColorProof(const ScColor& color, const ScribusDoc* doc, bool gamutCheck) { QColor tmp; bool gamutChkEnabled = doc ? doc->Gamut : false; bool spot = color.isSpotColor(); if (color.getColorModel() == colorModelRGB) { // Match 133x behavior (RGB greys map to cmyk greys) until we are able to make rgb profiled output if ( color.CR == color.MG && color.MG == color.YB ) gamutChkEnabled = false; RGBColor rgb; rgb.r = color.CR; rgb.g = color.MG; rgb.b = color.YB; tmp = getColorProof(rgb, doc, spot, gamutCheck & gamutChkEnabled); } else { CMYKColor cmyk; cmyk.c = color.CR; cmyk.m = color.MG; cmyk.y = color.YB; cmyk.k = color.K; tmp = getColorProof(cmyk, doc, spot, gamutCheck & gamutChkEnabled); } return tmp; }
QColor ScColorEngine::getColorProof(const ScColor& color, const ScribusDoc* doc, bool gamutCheck) { QColor tmp; bool gamutChkEnabled = doc ? doc->Gamut : false; bool spot = color.isSpotColor(); if (color.getColorModel() == colorModelRGB) { // Match 133x behavior (RGB greys map to cmyk greys) until we are able to make rgb profiled output if (color.m_values[0] == color.m_values[1] && color.m_values[1] == color.m_values[2]) gamutChkEnabled = false; RGBColor rgb; rgb.r = qRound(color.m_values[0] * 255.0); rgb.g = qRound(color.m_values[1] * 255.0); rgb.b = qRound(color.m_values[2] * 255.0); tmp = getColorProof(rgb, doc, spot, gamutCheck & gamutChkEnabled); } else { CMYKColor cmyk; cmyk.c = qRound(color.m_values[0] * 255.0); cmyk.m = qRound(color.m_values[1] * 255.0); cmyk.y = qRound(color.m_values[2] * 255.0); cmyk.k = qRound(color.m_values[3] * 255.0); tmp = getColorProof(cmyk, doc, spot, gamutCheck & gamutChkEnabled); } return tmp; }
QColor ScColorEngine::getShadeColorProof(const ScColor& color, const ScribusDoc* doc, double level) { QColor tmp; bool doGC = doc ? doc->Gamut : false; bool cmsUse = doc ? doc->HasCMS : false; bool softProof = doc ? doc->SoftProofing : false; if (color.getColorModel() == colorModelRGB) { RGBColor rgb; rgb.r = color.CR; rgb.g = color.MG; rgb.b = color.YB; getShadeColorRGB(color, doc, rgb, level); // Match 133x behavior for rgb grey until we are able to make rgb profiled output // (RGB greys map to cmyk greys) if ((cmsUse && softProof) && (rgb.r == rgb.g && rgb.g == rgb.b)) { doGC = false; CMYKColor cmyk; cmyk.c = cmyk.m = cmyk.y = 0; cmyk.k = 255 - rgb.g; tmp = getColorProof(cmyk, doc, color.isSpotColor(), doGC); } else tmp = getColorProof(rgb, doc, color.isSpotColor(), doGC); } else { CMYKColor cmyk; cmyk.c = color.CR; cmyk.m = color.MG; cmyk.y = color.YB; cmyk.k = color.K; getShadeColorCMYK(color, doc, cmyk, level); tmp = getColorProof(cmyk, doc, color.isSpotColor(), doGC); } return tmp; }
QColor ScColorEngine::getShadeColorProof(const ScColor& color, const ScribusDoc* doc, double level) { QColor tmp; bool doGC = doc ? doc->Gamut : false; bool cmsUse = doc ? doc->HasCMS : false; bool softProof = doc ? doc->SoftProofing : false; if (color.getColorModel() == colorModelRGB) { RGBColorF rgb; rgb.r = color.m_values[0]; rgb.g = color.m_values[1]; rgb.b = color.m_values[2]; getShadeColorRGB(color, doc, rgb, level); // Match 133x behavior for rgb grey until we are able to make rgb profiled output // (RGB greys map to cmyk greys) if ((cmsUse && softProof) && (rgb.r == rgb.g && rgb.g == rgb.b)) { doGC = false; CMYKColorF cmyk; cmyk.c = cmyk.m = cmyk.y = 0; cmyk.k = 1.0 - rgb.g; tmp = getColorProof(cmyk, doc, color.isSpotColor(), doGC); } else tmp = getColorProof(rgb, doc, color.isSpotColor(), doGC); } else if (color.getColorModel() == colorModelCMYK) { CMYKColorF cmyk; cmyk.c = color.m_values[0]; cmyk.m = color.m_values[1]; cmyk.y = color.m_values[2]; cmyk.k = color.m_values[3]; getShadeColorCMYK(color, doc, cmyk, level); tmp = getColorProof(cmyk, doc, color.isSpotColor(), doGC); } else if (color.getColorModel() == colorModelLab) { double inC[3]; inC[0] = 100 - (100 - color.m_L_val) * (level / 100.0); inC[1] = color.m_a_val * (level / 100.0); inC[2] = color.m_b_val * (level / 100.0); quint16 outC[3]; ScColorTransform trans = doc ? doc->stdLabToScreenTrans : ScCore->defaultLabToRGBTrans; ScColorTransform transProof = doc ? doc->stdProofLab : ScCore->defaultLabToRGBTrans; ScColorTransform transProofGC = doc ? doc->stdProofLabGC : ScCore->defaultLabToRGBTrans; if (cmsUse && doc && doc->SoftProofing) { ScColorTransform xform = doGC ? transProofGC : transProof; xform.apply(inC, outC, 1); tmp = QColor(outC[0] / 257, outC[1] / 257, outC[2] / 257); } else { trans.apply(inC, outC, 1); tmp = QColor(outC[0] / 257, outC[1] / 257, outC[2] / 257); } } return tmp; }