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 if (model == colorModelCMYK) { CMYKColor cmyk; getCMYKValues(color, doc, cmyk); newCol.setColor(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] = color.CR * 257; inC[1] = color.MG * 257; inC[2] = color.YB * 257; trans.apply(inC, outC, 1); newCol.setColor(outC[0], outC[1], outC[2]); } else { ScColorProfile profRGB = doc ? doc->DocInputCMYKProf : ScCore->defaultCMYKProfile; ScColorProfile profLab = ScCore->defaultLabProfile; ScColorTransform trans = engine.createTransform(profRGB, Format_CMYK_16, profLab, Format_Lab_Dbl, Intent_Perceptual, 0); double outC[3]; unsigned short inC[4]; inC[0] = color.CR * 257; inC[1] = color.MG * 257; inC[2] = color.YB * 257; inC[3] = color.K * 257; trans.apply(inC, outC, 1); newCol.setColor(outC[0], outC[1], outC[2]); } } return newCol; }
void CMYKChoose::setColor2(int h, int s, bool ende) { ScColor tmp; if (Farbe.getColorModel() == colorModelLab) { if (isHLC) tmp = ScColor(MagentaSp->value(), static_cast<double>(h), static_cast<double>(s)); else tmp = ScColor(CyanSp->value(), static_cast<double>(h), static_cast<double>(s)); } else { QColor tm = QColor::fromHsv(qMax(qMin(359,h),0), qMax(qMin(255,255-s),0), 255-BlackComp, QColor::Hsv); int r, g, b; tm.getRgb(&r, &g, &b); tmp.fromQColor(tm); if (Farbe.getColorModel() == colorModelCMYK) { CMYKColor cmyk; ScColorEngine::getCMYKValues(tmp, m_doc, cmyk); tmp.setColor(cmyk.c, cmyk.m, cmyk.y, cmyk.k); } } imageN.fill( ScColorEngine::getDisplayColor(tmp, m_doc) ); if ( ScColorEngine::isOutOfGamut(tmp, m_doc) ) paintAlert(alertIcon, imageN, 2, 2, false); NewC->setPixmap( imageN ); Farbe = tmp; if (ende) setValues(); }
void XtgScanner::defColor() { bool isSpot = false; ScColor tmp; enterState(stringMode); token = getToken(); while (lookAhead() != '>' ) { token = getToken(); if ((token == "CMJN") || (token == "CMYK")) { enterState(tagMode); token = getToken(); if (token == "S") { token = getToken(); isSpot = true; } double c = getToken().toDouble(); double m = getToken().toDouble(); double y = getToken().toDouble(); double k = getToken().toDouble(); tmp.setColor(qRound(c * 2.55), qRound(m * 255), qRound(y * 255), qRound(k * 255)); tmp.setSpotColor(isSpot); tmp.setRegistrationColor(false); doc->PageColors.tryAddColor(sfcName, tmp); } else if (token == "RGB") { enterState(tagMode); token = getToken(); if (token == "S") { token = getToken(); isSpot = true; } double r = getToken().toDouble(); double g = getToken().toDouble(); double b = getToken().toDouble(); tmp.setColorRGB(qRound(r * 2.55), qRound(g * 255), qRound(b * 255)); tmp.setSpotColor(isSpot); tmp.setRegistrationColor(false); doc->PageColors.tryAddColor(sfcName, tmp); } } top++; enterState(textMode); }
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 CMYKChoose::setColor() { int c, m, y; int h, s, v; int k = 0; double L, a, b; ScColor tmp; if (Farbe.getColorModel() == colorModelCMYK) { c = qRound(CyanSp->value() * 2.55); m = qRound(MagentaSp->value() * 2.55); y = qRound(YellowSp->value() * 2.55); k = qRound(BlackSp->value() * 2.55); tmp.setColor(c, m, y, k); Farbe = tmp; if (dynamic) { CyanSL->setPalette(sliderPix(180)); MagentaSL->setPalette(sliderPix(300)); YellowSL->setPalette(sliderPix(60)); BlackSL->setPalette(sliderBlack()); } BlackComp = k; ScColorEngine::getRGBColor(tmp, m_doc).getHsv(&h, &s, &v); ColorMap->drawPalette(v); ColorMap->setMark(h, s); } else if (Farbe.getColorModel() == colorModelRGB) { c = qRound(CyanSp->value()); m = qRound(MagentaSp->value()); y = qRound(YellowSp->value()); k = qRound(BlackSp->value()); if (Wsave) { blockSignals(true); c = c / 51 * 51; m = m / 51 * 51; y = y / 51 * 51; CyanSp->setValue(c); MagentaSp->setValue(m); YellowSp->setValue(y); CyanSL->setValue(c * 1000.0); MagentaSL->setValue(m * 1000.0); YellowSL->setValue(y * 1000.0); blockSignals(false); } tmp.setColorRGB(c, m, y); QColor tmp2 = QColor(c, m, y); tmp2.getHsv(&h, &s, &v); BlackComp = 255 - v; Farbe = tmp; if (dynamic) { CyanSL->setPalette(sliderPix(0)); MagentaSL->setPalette(sliderPix(120)); YellowSL->setPalette(sliderPix(240)); } BlackComp = k; ScColorEngine::getRGBColor(tmp, m_doc).getHsv(&h, &s, &v); ColorMap->drawPalette(v); ColorMap->setMark(h, s); } else if (Farbe.getColorModel() == colorModelLab) { double Lalt; Farbe.getLab(&Lalt, &a, &b); if (isHLC) { L = MagentaSp->value(); double cv = 360 - CyanSp->value(); double yv = YellowSp->value(); QLineF lin = QLineF::fromPolar(yv, cv); a = lin.p2().x(); b = lin.p2().y(); } else { L = CyanSp->value(); a = MagentaSp->value(); b = YellowSp->value(); } tmp.setColor(L, a, b); Farbe = tmp; if (dynamic) { CyanSL->setPalette(sliderPix(0)); MagentaSL->setPalette(sliderPix(120)); YellowSL->setPalette(sliderPix(240)); } BlackComp = qRound(L * 2.55); if (L != Lalt) ColorMap->drawPalette(L * 2.55); ColorMap->setMark(a, b); } imageN.fill(ScColorEngine::getDisplayColor(tmp, m_doc) ); if ( ScColorEngine::isOutOfGamut(tmp, m_doc) ) paintAlert(alertIcon, imageN, 2, 2, false); NewC->setPixmap( imageN ); }
void ColorSetManager::initialiseDefaultPrefs(struct ApplicationPrefs& appPrefs) { QString defaultSwatch = ScPaths::instance().shareDir() + "swatches/" + "Scribus_Basic.xml"; QFile fiC(defaultSwatch); if (!fiC.exists()) { appPrefs.colorPrefs.DColors.insert("White", ScColor(0, 0, 0, 0)); appPrefs.colorPrefs.DColors.insert("Black", ScColor(0, 0, 0, 255)); ScColor cc = ScColor(255, 255, 255, 255); cc.setRegistrationColor(true); appPrefs.colorPrefs.DColors.insert("Registration", cc); appPrefs.colorPrefs.DColors.insert("Blue", ScColor(255, 255, 0, 0)); appPrefs.colorPrefs.DColors.insert("Cyan", ScColor(255, 0, 0, 0)); appPrefs.colorPrefs.DColors.insert("Green", ScColor(255, 0, 255, 0)); appPrefs.colorPrefs.DColors.insert("Red", ScColor(0, 255, 255, 0)); appPrefs.colorPrefs.DColors.insert("Yellow", ScColor(0, 0, 255, 0)); appPrefs.colorPrefs.DColors.insert("Magenta", ScColor(0, 255, 0, 0)); appPrefs.colorPrefs.DColorSet = "Scribus_Small"; } else { if (fiC.open(QIODevice::ReadOnly)) { QString ColorEn, Cname; int Rval, Gval, Bval; QTextStream tsC(&fiC); ColorEn = tsC.readLine(); if (ColorEn.startsWith("<?xml version=")) { QByteArray docBytes(""); loadRawText(defaultSwatch, docBytes); QString docText(""); docText = QString::fromUtf8(docBytes); QDomDocument docu("scridoc"); docu.setContent(docText); ScColor lf = ScColor(); QDomElement elem = docu.documentElement(); QDomNode PAGE = elem.firstChild(); while(!PAGE.isNull()) { QDomElement pg = PAGE.toElement(); if(pg.tagName()=="COLOR" && pg.attribute("NAME")!=CommonStrings::None) { if (pg.hasAttribute("CMYK")) lf.setNamedColor(pg.attribute("CMYK")); else if (pg.hasAttribute("RGB")) lf.fromQColor(QColor(pg.attribute("RGB"))); else { double L = pg.attribute("L", 0).toDouble(); double a = pg.attribute("A", 0).toDouble(); double b = pg.attribute("B", 0).toDouble(); lf.setColor(L, a, b); } if (pg.hasAttribute("Spot")) lf.setSpotColor(static_cast<bool>(pg.attribute("Spot").toInt())); else lf.setSpotColor(false); if (pg.hasAttribute("Register")) lf.setRegistrationColor(static_cast<bool>(pg.attribute("Register").toInt())); else lf.setRegistrationColor(false); appPrefs.colorPrefs.DColors.insert(pg.attribute("NAME"), lf); } PAGE=PAGE.nextSibling(); } } else { while (!tsC.atEnd()) { ColorEn = tsC.readLine(); QTextStream CoE(&ColorEn, QIODevice::ReadOnly); CoE >> Rval; CoE >> Gval; CoE >> Bval; CoE >> Cname; ScColor tmp; tmp.setColorRGB(Rval, Gval, Bval); appPrefs.colorPrefs.DColors.insert(Cname, tmp); } } fiC.close(); } appPrefs.colorPrefs.DColorSet = ScPaths::instance().shareDir() + "swatches/" + "Scribus Basic"; }
bool importColorsFromFile(QString fileName, ColorList &EditColors, QHash<QString, VGradient> *dialogGradients, bool merge) { if (fileName.isEmpty()) return false; int oldCount = EditColors.count(); QFileInfo fi = QFileInfo(fileName); QString ext = fi.suffix().toLower(); if (extensionIndicatesEPSorPS(ext)) { PaletteLoader_PS psPalLoader; psPalLoader.setupTargets(&EditColors, dialogGradients); return psPalLoader.importFile(fileName, merge); } else { QStringList allFormatsV = LoadSavePlugin::getExtensionsForColors(); if (allFormatsV.contains(ext)) { FileLoader fl(fileName); int testResult = fl.testFile(); if (testResult != -1) { ColorList LColors; if (fl.readColors(LColors)) { ColorList::Iterator it; for (it = LColors.begin(); it != LColors.end(); ++it) { EditColors.tryAddColor(it.key(), it.value()); } return (EditColors.count() != oldCount); } } } if (ext == "acb") // Adobe color book format { PaletteLoader_Adobe_acb adobePalLoader; if (adobePalLoader.isFileSupported(fileName)) { adobePalLoader.setupTargets(&EditColors, dialogGradients); return adobePalLoader.importFile(fileName, merge); } PaletteLoader_Autocad_acb autocadPalLoder; if (autocadPalLoder.isFileSupported(fileName)) { autocadPalLoder.setupTargets(&EditColors, dialogGradients); return autocadPalLoder.importFile(fileName, merge); } return false; } else if (ext == "aco") // Adobe color swatch format { PaletteLoader_Adobe_aco adobePalLoader; if (adobePalLoader.isFileSupported(fileName)) { adobePalLoader.setupTargets(&EditColors, dialogGradients); return adobePalLoader.importFile(fileName, merge); } return false; } else if (ext == "ase") // Adobe swatch exchange format { PaletteLoader_Adobe_ase adobePalLoader; if (adobePalLoader.isFileSupported(fileName)) { adobePalLoader.setupTargets(&EditColors, dialogGradients); return adobePalLoader.importFile(fileName, merge); } return false; } else if (ext == "cxf") // Adobe swatch exchange format { PaletteLoader_CxF cxfLoader; if (cxfLoader.isFileSupported(fileName)) { cxfLoader.setupTargets(&EditColors, dialogGradients); return cxfLoader.importFile(fileName, merge); } return false; } else if (ext == "skp") // Sk1 palette { PaletteLoader_sK1 sk1PalLoader; if (sk1PalLoader.isFileSupported(fileName)) { sk1PalLoader.setupTargets(&EditColors, dialogGradients); return sk1PalLoader.importFile(fileName, merge); } return false; } else if (ext == "sbz") { PaletteLoader_Swatchbook swatchbookLoader; if (swatchbookLoader.isFileSupported(fileName)) { swatchbookLoader.setupTargets(&EditColors, dialogGradients); return swatchbookLoader.importFile(fileName, merge); } return false; } else // try for OpenOffice, Viva and our own format { QFile fiC(fileName); if (fiC.open(QIODevice::ReadOnly)) { QString ColorEn, Cname; int Rval, Gval, Bval, Kval; ScTextStream tsC(&fiC); ColorEn = tsC.readLine(); bool cus = false; if (ColorEn.contains("OpenOffice")) cus = true; if ((ColorEn.startsWith("<?xml version=")) || (ColorEn.contains("VivaColors"))) { QByteArray docBytes(""); loadRawText(fileName, docBytes); QString docText(""); docText = QString::fromUtf8(docBytes); QDomDocument docu("scridoc"); docu.setContent(docText); ScColor lf = ScColor(); QDomElement elem = docu.documentElement(); QString dTag = ""; dTag = elem.tagName(); QString nameMask = "%1"; nameMask = elem.attribute("mask", "%1"); QDomNode PAGE = elem.firstChild(); while (!PAGE.isNull()) { QDomElement pg = PAGE.toElement(); if (pg.tagName()=="COLOR" && pg.attribute("NAME")!=CommonStrings::None) { if (pg.hasAttribute("SPACE")) { QString space = pg.attribute("SPACE"); if (space == "CMYK") { double c = pg.attribute("C", "0").toDouble() / 100.0; double m = pg.attribute("M", "0").toDouble() / 100.0; double y = pg.attribute("Y", "0").toDouble() / 100.0; double k = pg.attribute("K", "0").toDouble() / 100.0; lf.setCmykColorF(c, m, y, k); } else if (space == "RGB") { double r = pg.attribute("R", "0").toDouble() / 255.0; double g = pg.attribute("G", "0").toDouble() / 255.0; double b = pg.attribute("B", "0").toDouble() / 255.0; lf.setRgbColorF(r, g, b); } else if (space == "Lab") { double L = pg.attribute("L", "0").toDouble(); double a = pg.attribute("A", "0").toDouble(); double b = pg.attribute("B", "0").toDouble(); lf.setLabColor(L, a, b); } } else if (pg.hasAttribute("CMYK")) lf.setNamedColor(pg.attribute("CMYK")); else if (pg.hasAttribute("RGB")) lf.fromQColor(QColor(pg.attribute("RGB"))); else { double L = pg.attribute("L", "0").toDouble(); double a = pg.attribute("A", "0").toDouble(); double b = pg.attribute("B", "0").toDouble(); lf.setLabColor(L, a, b); } if (pg.hasAttribute("Spot")) lf.setSpotColor(static_cast<bool>(pg.attribute("Spot").toInt())); else lf.setSpotColor(false); if (pg.hasAttribute("Register")) lf.setRegistrationColor(static_cast<bool>(pg.attribute("Register").toInt())); else lf.setRegistrationColor(false); EditColors.tryAddColor(pg.attribute("NAME"), lf); } else if (pg.tagName() == "Gradient") { if (dialogGradients != NULL) { VGradient gra = VGradient(VGradient::linear); gra.clearStops(); QDomNode grad = pg.firstChild(); while (!grad.isNull()) { QDomElement stop = grad.toElement(); QString name = stop.attribute("NAME"); double ramp = ScCLocale::toDoubleC(stop.attribute("RAMP"), 0.0); int shade = stop.attribute("SHADE", "100").toInt(); double opa = ScCLocale::toDoubleC(stop.attribute("TRANS"), 1.0); QColor color; if (name == CommonStrings::None) color = QColor(255, 255, 255, 0); else { const ScColor& col = EditColors[name]; color = ScColorEngine::getShadeColorProof(col, NULL, shade); } gra.addStop(color, ramp, 0.5, opa, name, shade); grad = grad.nextSibling(); } if ((!dialogGradients->contains(pg.attribute("Name"))) || (merge)) dialogGradients->insert(pg.attribute("Name"), gra); else { QString tmp; QString name = pg.attribute("Name"); name += "("+tmp.setNum(dialogGradients->count())+")"; dialogGradients->insert(name, gra); } } } else if (pg.tagName()=="draw:color" && pg.attribute("draw:name")!=CommonStrings::None) { if (pg.hasAttribute("draw:color")) lf.setNamedColor(pg.attribute("draw:color")); lf.setSpotColor(false); lf.setRegistrationColor(false); QString nam = pg.attribute("draw:name"); if (!nam.isEmpty()) EditColors.tryAddColor(nam, lf); } else if (dTag == "VivaColors") { int cVal = 0; int mVal = 0; int yVal = 0; int kVal = 0; QString nam = nameMask.arg(pg.attribute("name")); if (pg.attribute("type") == "cmyk") { QDomNode colNode = pg.firstChild(); while (!colNode.isNull()) { QDomElement colVal = colNode.toElement(); if (colVal.tagName() == "cyan") cVal = colVal.text().toInt(); if (colVal.tagName() == "magenta") mVal = colVal.text().toInt(); if (colVal.tagName() == "yellow") yVal = colVal.text().toInt(); if (colVal.tagName() == "key") kVal = colVal.text().toInt(); colNode = colNode.nextSibling(); } lf.setColorF(cVal / 100.0, mVal / 100.0, yVal / 100.0, kVal / 100.0); lf.setSpotColor(false); lf.setRegistrationColor(false); if (!nam.isEmpty()) EditColors.tryAddColor(nam, lf); } else if (pg.attribute("type") == "rgb") { QDomNode colNode = pg.firstChild(); while (!colNode.isNull()) { QDomElement colVal = colNode.toElement(); if (colVal.tagName() == "red") cVal = colVal.text().toInt(); if (colVal.tagName() == "green") mVal = colVal.text().toInt(); if (colVal.tagName() == "blue") yVal = colVal.text().toInt(); colNode = colNode.nextSibling(); } lf.setRgbColor(cVal, mVal, yVal); lf.setSpotColor(false); lf.setRegistrationColor(false); if (!nam.isEmpty()) EditColors.tryAddColor(nam, lf); } } PAGE=PAGE.nextSibling(); } } else { QString paletteName = ""; QString dummy; if (ColorEn.startsWith("GIMP Palette")) { ColorEn = tsC.readLine(); ScTextStream CoE(&ColorEn, QIODevice::ReadOnly); CoE >> dummy >> paletteName; } while (!tsC.atEnd()) { ScColor tmp; ColorEn = tsC.readLine(); if (ColorEn.length()>0 && ColorEn[0]==QChar('#')) continue; ScTextStream CoE(&ColorEn, QIODevice::ReadOnly); CoE >> Rval; CoE >> Gval; CoE >> Bval; if (cus) { CoE >> Kval; Cname = CoE.readAll().trimmed(); tmp.setColor(Rval, Gval, Bval, Kval); } else { Cname = CoE.readAll().trimmed(); tmp.setRgbColor(Rval, Gval, Bval); } if (Cname == "Untitled") Cname = ""; if (Cname.length() == 0) { if (!cus) Cname = paletteName + QString("#%1%2%3").arg(Rval,2,16).arg(Gval,2,16).arg(Bval,2,16).toUpper(); else Cname = paletteName + QString("#%1%2%3%4").arg(Rval,2,16).arg(Gval,2,16).arg(Bval,2,16).arg(Kval,2,16).toUpper(); Cname.replace(" ","0"); } EditColors.tryAddColor(Cname, tmp); } } fiC.close(); }