QColor ScColorEngine::getDisplayColor(const ScColor& color, const ScribusDoc* doc, double level) { QColor tmp; 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); tmp = getDisplayColor(rgb, doc, color.isSpotColor()); } 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 = getDisplayColor(cmyk, doc, color.isSpotColor()); } else if (color.getColorModel() == colorModelLab) { ScColorTransform trans = doc ? doc->stdLabToScreenTrans : ScCore->defaultLabToRGBTrans; 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]; trans.apply(inC, outC, 1); tmp = QColor(outC[0] / 257, outC[1] / 257, outC[2] / 257); } return tmp; }
void ScColorEngine::getShadeColorCMYK(const ScColor& color, const ScribusDoc* doc, CMYKColorF& cmyk, double level) { if (color.getColorModel() == colorModelRGB) { RGBColorF rgb; getShadeColorRGB(color, doc, rgb, level); ScColor tmpR; tmpR.setRgbColorF(rgb.r, rgb.g, rgb.b); getCMYKValues(tmpR, doc, cmyk); } else if (color.getColorModel() == colorModelCMYK) { cmyk.c = color.m_values[0] * level / 100.0; cmyk.m = color.m_values[1] * level / 100.0; cmyk.y = color.m_values[2] * level / 100.0; cmyk.k = color.m_values[3] * level / 100.0; } else if (color.getColorModel() == colorModelLab) { ScColorTransform trans = doc ? doc->stdLabToCMYKTrans : ScCore->defaultLabToCMYKTrans; 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[4]; trans.apply(inC, outC, 1); cmyk.c = outC[0] / 65535.0; cmyk.m = outC[1] / 65535.0; cmyk.y = outC[2] / 65535.0; cmyk.k = outC[3] / 65535.0; } }
void ScColorEngine::getShadeColorCMYK(const ScColor& color, const ScribusDoc* doc, CMYKColor& cmyk, double level) { if (color.getColorModel() == colorModelRGB) { RGBColor rgb; getShadeColorRGB(color, doc, rgb, level); ScColor tmpR(rgb.r, rgb.g, rgb.b); getCMYKValues(tmpR, doc, cmyk); } else if (color.getColorModel() == colorModelCMYK) { cmyk.c = qRound(color.CR * level / 100.0); cmyk.m = qRound(color.MG * level / 100.0); cmyk.y = qRound(color.YB * level / 100.0); cmyk.k = qRound(color.K * level / 100.0); } else if (color.getColorModel() == colorModelLab) { ScColorTransform trans = doc ? doc->stdLabToCMYKTrans : ScCore->defaultLabToCMYKTrans; double inC[3]; inC[0] = color.L_val * (level / 100.0); inC[1] = color.a_val; inC[2] = color.b_val; quint16 outC[4]; trans.apply(inC, outC, 1); cmyk.c = outC[0] / 257; cmyk.m = outC[1] / 257; cmyk.y = outC[2] / 257; cmyk.k = outC[3] / 257; } }
QColor ScColorEngine::getShadeColor(const ScColor& color, const ScribusDoc* doc, double level) { RGBColor rgb; rgb.r = color.CR; rgb.g = color.MG; rgb.b = color.YB; getShadeColorRGB(color, doc, rgb, level); return QColor(rgb.r, rgb.g, rgb.b); }
QColor ScColorEngine::getShadeColor(const ScColor& color, const ScribusDoc* doc, double level) { 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); getShadeColorRGB(color, doc, rgb, level); return QColor(rgb.r, rgb.g, rgb.b); }
void ScColorEngine::getShadeColorCMYK(const ScColor& color, const ScribusDoc* doc, CMYKColor& cmyk, double level) { if (color.getColorModel() == colorModelRGB) { RGBColor rgb; getShadeColorRGB(color, doc, rgb, level); ScColor tmpR(rgb.r, rgb.g, rgb.b); getCMYKValues(tmpR, doc, cmyk); } else { cmyk.c = qRound(color.CR * level / 100.0); cmyk.m = qRound(color.MG * level / 100.0); cmyk.y = qRound(color.YB * level / 100.0); cmyk.k = qRound(color.K * level / 100.0); } }
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::getDisplayColor(const ScColor& color, const ScribusDoc* doc, double level) { QColor tmp; if (color.getColorModel() == colorModelRGB) { RGBColor rgb; rgb.r = color.CR; rgb.g = color.MG; rgb.b = color.YB; getShadeColorRGB(color, doc, rgb, level); tmp = getDisplayColor(rgb, doc, color.isSpotColor()); } 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 = getDisplayColor(cmyk, doc, color.isSpotColor()); } 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; }