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; }
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; }
void ScColorEngine::getShadeColorRGB(const ScColor& color, const ScribusDoc* doc, RGBColorF& rgb, double level) { if (color.getColorModel() == colorModelCMYK) { CMYKColorF cmyk; getShadeColorCMYK(color, doc, cmyk, level); ScColor tmpC; tmpC.setColorF(cmyk.c, cmyk.m, cmyk.y, cmyk.k); getRGBValues(tmpC, doc, rgb); } else if (color.getColorModel() == colorModelRGB) { HSVColorF hsv; color.getRawRGBColor(&rgb); rgb.toHsv(hsv); hsv.s = hsv.s * (level / 100.0); hsv.v = 1.0 - (1.0 - hsv.v) * (level / 100.0); hsv.toRgb(rgb); //We could also compute rgb shade using rgb directly /*rgb.r = 1.0 - ((1.0 - color.m_values[0]) * level / 100); rgb.g = 1.0 - ((1.0 - color.m_values[1]) * level / 100); rgb.b = 1.0 - ((1.0 - color.m_values[2]) * level / 100);*/ } else if (color.getColorModel() == colorModelLab) { ScColorTransform trans = doc ? doc->stdLabToRGBTrans : 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); rgb.r = outC[0] / 65535.0; rgb.g = outC[1] / 65535.0; rgb.b = outC[2] / 65535.0; } }
void ScColorEngine::getShadeColorRGB(const ScColor& color, const ScribusDoc* doc, RGBColor& rgb, double level) { if (color.getColorModel() == colorModelCMYK) { CMYKColor cmyk; getShadeColorCMYK(color, doc, cmyk, level); ScColor tmpC(cmyk.c, cmyk.m, cmyk.y, cmyk.k); getRGBValues(tmpC, doc, rgb); } else if (color.getColorModel() == colorModelRGB) { int h, s, v, snew, vnew; QColor tmpR(color.CR, color.MG, color.YB); tmpR.getHsv(&h, &s, &v); snew = qRound(s * level / 100.0); vnew = 255 - qRound(((255 - v) * level / 100.0)); tmpR.setHsv(h, snew, vnew); tmpR.getRgb(&rgb.r, &rgb.g, &rgb.b); //We could also compute rgb shade using rgb directly /*rgb.CR = 255 - ((255 - color.CR) * level / 100); rgb.MG = 255 - ((255 - color.MG) * level / 100); rgb.YB = 255 - ((255 - color.YB) * level / 100);*/ } else if (color.getColorModel() == colorModelLab) { ScColorTransform trans = doc ? doc->stdLabToRGBTrans : ScCore->defaultLabToRGBTrans; double inC[3]; inC[0] = color.L_val * (level / 100.0); inC[1] = color.a_val; inC[2] = color.b_val; quint16 outC[3]; trans.apply(inC, outC, 1); rgb.r = outC[0] / 257; rgb.g = outC[1] / 257; rgb.b = outC[2] / 257; } }
void ScColorEngine::getShadeColorRGB(const ScColor& color, const ScribusDoc* doc, RGBColor& rgb, double level) { if (color.getColorModel() == colorModelCMYK) { CMYKColor cmyk; getShadeColorCMYK(color, doc, cmyk, level); ScColor tmpC(cmyk.c, cmyk.m, cmyk.y, cmyk.k); getRGBValues(tmpC, doc, rgb); } else { int h, s, v, snew, vnew; QColor tmpR(color.CR, color.MG, color.YB); tmpR.getHsv(&h, &s, &v); snew = qRound(s * level / 100.0); vnew = 255 - qRound(((255 - v) * level / 100.0)); tmpR.setHsv(h, snew, vnew); tmpR.getRgb(&rgb.r, &rgb.g, &rgb.b); //We could also compute rgb shade using rgb directly /*rgb.CR = 255 - ((255 - color.CR) * level / 100); rgb.MG = 255 - ((255 - color.MG) * level / 100); rgb.YB = 255 - ((255 - color.YB) * level / 100);*/ } }
QColor ScColorEngine::getRGBColor(const ScColor& color, const ScribusDoc* doc) { RGBColor rgb; getRGBValues(color, doc, rgb); return QColor(rgb.r, rgb.g, rgb.b); }