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; } }
ScColor ScColorEngine::convertToModel(const ScColor& color, const ScribusDoc* doc, colorModel model) { colorModel oldModel = color.getColorModel(); if (oldModel == model) return ScColor(color); ScColor newCol; if (model == colorModelRGB) { RGBColorF rgb; getRGBValues(color, doc, rgb); newCol.setRgbColorF(rgb.r, rgb.g, rgb.b); } else if (model == colorModelCMYK) { CMYKColorF cmyk; getCMYKValues(color, doc, cmyk); newCol.setColorF(cmyk.c, cmyk.m, cmyk.y, cmyk.k); } else if (model == colorModelLab) { ScColorMgmtEngine engine(ScCore->defaultEngine); if (oldModel == colorModelRGB) { ScColorProfile profRGB = doc ? doc->DocInputRGBProf : ScCore->defaultRGBProfile; ScColorProfile profLab = ScCore->defaultLabProfile; ScColorTransform trans = engine.createTransform(profRGB, Format_RGB_16, profLab, Format_Lab_Dbl, Intent_Perceptual, 0); double outC[3]; unsigned short inC[3]; inC[0] = qRound(color.m_values[0] * 65535); inC[1] = qRound(color.m_values[1] * 65535); inC[2] = qRound(color.m_values[2] * 65535); trans.apply(inC, outC, 1); newCol.setLabColor(outC[0], outC[1], outC[2]); } else { ScColorProfile profCMYK = doc ? doc->DocInputCMYKProf : ScCore->defaultCMYKProfile; ScColorProfile profLab = ScCore->defaultLabProfile; ScColorTransform trans = engine.createTransform(profCMYK, Format_CMYK_16, profLab, Format_Lab_Dbl, Intent_Perceptual, 0); double outC[3]; unsigned short inC[4]; inC[0] = qRound(color.m_values[0] * 65535); inC[1] = qRound(color.m_values[1] * 65535); inC[2] = qRound(color.m_values[2] * 65535); inC[3] = qRound(color.m_values[3] * 65535); trans.apply(inC, outC, 1); newCol.setLabColor(outC[0], outC[1], outC[2]); } } return newCol; }
void ScColorEngine::applyGCR(ScColor& color, const ScribusDoc* doc) { bool cmsUse = doc ? doc->HasCMS : false; if (!(ScCore->haveCMS() && cmsUse)) { CMYKColor cmyk; getCMYKValues(color, doc, cmyk); int k = qMin(qMin(cmyk.c, cmyk.m), cmyk.y); color.CR = cmyk.c - k; color.MG = cmyk.m - k; color.YB = cmyk.y - k; color.K = qMin((cmyk.k + k), 255); } }
void ScColorEngine::applyGCR(ScColor& color, const ScribusDoc* doc) { bool cmsUse = doc ? doc->HasCMS : false; if (!(ScCore->haveCMS() && cmsUse) && (color.getColorModel() != colorModelLab)) { CMYKColor cmyk; getCMYKValues(color, doc, cmyk); int k = qMin(qMin(cmyk.c, cmyk.m), cmyk.y); color.m_values[0] = (cmyk.c - k) / 255.0; color.m_values[1] = (cmyk.m - k) / 255.0; color.m_values[2] = (cmyk.y - k) / 255.0; color.m_values[3] = qMin((cmyk.k + k) / 255.0, 1.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 { 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); } }
ScColor ScColorEngine::convertToModel(const ScColor& color, const ScribusDoc* doc, colorModel model) { colorModel oldModel = color.getColorModel(); if( oldModel == model ) return ScColor(color); ScColor newCol; if( model == colorModelRGB ) { RGBColor rgb; getRGBValues(color, doc, rgb); newCol.setColorRGB(rgb.r, rgb.g, rgb.b); } else { CMYKColor cmyk; getCMYKValues(color, doc, cmyk); newCol.setColor(cmyk.c, cmyk.m, cmyk.y, cmyk.k); } return newCol; }