本文整理汇总了C++中ScColorTransform类的典型用法代码示例。如果您正苦于以下问题:C++ ScColorTransform类的具体用法?C++ ScColorTransform怎么用?C++ ScColorTransform使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ScColorTransform类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getShadeColorRGB
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;
}
示例2: getDisplayColor
QColor ScColorEngine::getDisplayColor(CMYKColor& cmyk, const ScribusDoc* doc, bool spot)
{
int r = 0, g = 0, b = 0;
unsigned short inC[4];
unsigned short outC[4];
ScColorTransform transCMYKMon = doc ? doc->stdTransCMYKMon : ScCore->defaultCMYKToRGBTrans;
if (ScCore->haveCMS() && transCMYKMon)
{
inC[0] = cmyk.c * 257;
inC[1] = cmyk.m * 257;
inC[2] = cmyk.y * 257;
inC[3] = cmyk.k * 257;
transCMYKMon.apply(inC, outC, 1);
r = outC[0] / 257;
g = outC[1] / 257;
b = outC[2] / 257;
}
else
{
r = 255 - qMin(255, cmyk.c + cmyk.k);
g = 255 - qMin(255, cmyk.m + cmyk.k);
b = 255 - qMin(255, cmyk.y + cmyk.k);
}
return QColor(r, g, b);
}
示例3: getColorProof
QColor ScColorEngine::getColorProof(RGBColor& rgb, const ScribusDoc* doc, bool spot, bool gamutCkeck)
{
unsigned short inC[4];
unsigned short outC[4];
int r = rgb.r, g = rgb.g, b = rgb.b;
ScColorTransform transRGBMon = doc ? doc->stdTransRGBMon : ScCore->defaultRGBToScreenSolidTrans;
ScColorTransform transProof = doc ? doc->stdProof : ScCore->defaultRGBToScreenSolidTrans;
ScColorTransform transProofGC = doc ? doc->stdProofGC : ScCore->defaultRGBToScreenSolidTrans;
bool cmsUse = doc ? doc->HasCMS : false;
bool cmsTrans = (transRGBMon && transProof && transProofGC);
if (ScCore->haveCMS() && cmsTrans)
{
inC[0] = rgb.r * 257;
inC[1] = rgb.g * 257;
inC[2] = rgb.b * 257;
if (cmsUse && !spot && doc->SoftProofing)
{
ScColorTransform xform = gamutCkeck ? transProofGC : transProof;
xform.apply(inC, outC, 1);
r = outC[0] / 257;
g = outC[1] / 257;
b = outC[2] / 257;
}
else
{
transRGBMon.apply(inC, outC, 1);
r = outC[0] / 257;
g = outC[1] / 257;
b = outC[2] / 257;
}
}
return QColor(r, g, b);
}
示例4: getDisplayColor
QColor ScColorEngine::getDisplayColor(const ScColor& color, const ScribusDoc* doc)
{
QColor tmp;
if (color.getColorModel() == colorModelRGB)
{
RGBColor rgb;
rgb.r = color.CR;
rgb.g = color.MG;
rgb.b = color.YB;
tmp = getDisplayColor(rgb, doc, color.isSpotColor());
}
else if (color.getColorModel() == colorModelCMYK)
{
CMYKColor cmyk;
cmyk.c = color.CR;
cmyk.m = color.MG;
cmyk.y = color.YB;
cmyk.k = color.K;
tmp = getDisplayColor(cmyk, doc, color.isSpotColor());
}
else if (color.getColorModel() == colorModelLab)
{
ScColorTransform trans = doc ? doc->stdLabToRGBTrans : ScCore->defaultLabToRGBTrans;
double inC[3];
inC[0] = color.L_val;
inC[1] = color.a_val;
inC[2] = color.b_val;
quint16 outC[3];
trans.apply(inC, outC, 1);
tmp = QColor(outC[0] / 257, outC[1] / 257, outC[2] / 257);
}
return tmp;
}
示例5: getShadeColorRGB
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;
}
}
示例6: addTransform
void ScColorTransformPool::addTransform(const ScColorTransform& transform, bool force)
{
ScColorTransform trans;
if (!force)
trans = findTransform(transform.transformInfo());
if (trans.isNull())
m_pool.append(transform.weakRef());
}
示例7: isOutOfGamut
bool ScColorEngine::isOutOfGamut(const ScColor& color, const ScribusDoc* doc)
{
bool outOfGamutFlag = false;
if (color.isSpotColor())
return false;
unsigned short inC[4];
unsigned short outC[4];
bool cmsUse = doc ? doc->HasCMS : false;
if (ScCore->haveCMS() && cmsUse)
{
bool alert = true;
ScColorTransform xformProof;
if (color.getColorModel() == colorModelRGB)
{
inC[0] = qRound(color.m_values[0] * 65535.0);
inC[1] = qRound(color.m_values[1] * 65535.0);
inC[2] = qRound(color.m_values[2] * 65535.0);
xformProof = doc->stdProofGC;
if ((color.m_values[0] == 0) && (color.m_values[1] == 0) && (color.m_values[2] == 1.0))
alert = false;
if ((color.m_values[0] == color.m_values[1] && color.m_values[1] == color.m_values[2]))
alert = false;
}
else if (color.getColorModel() == colorModelCMYK)
{
inC[0] = qRound(color.m_values[0] * 65535.0);
inC[1] = qRound(color.m_values[1] * 65535.0);
inC[2] = qRound(color.m_values[2] * 65535.0);
inC[3] = qRound(color.m_values[3] * 65535.0);
xformProof = doc->stdProofCMYKGC;
if ((color.m_values[0] == 1.0) && (color.m_values[1] == 0) && (color.m_values[3] == 0) && (color.m_values[2] == 1.0))
alert = false;
if ((color.m_values[0] == 0.0) && (color.m_values[1] == 0) && (color.m_values[2] == 0))
alert = false;
if ((color.m_values[0] == color.m_values[1]) && (color.m_values[0] == color.m_values[2]) && (color.m_values[2] == color.m_values[3]))
alert = false;
}
else if (color.getColorModel() == colorModelLab)
{
double inC[3];
inC[0] = color.m_L_val;
inC[1] = color.m_a_val;
inC[2] = color.m_b_val;
xformProof = doc->stdProofLabGC;
xformProof.apply(inC, outC, 1);
if ((outC[0]/257 == 0) && (outC[1]/257 == 255) && (outC[2]/257 == 0))
outOfGamutFlag = true;
alert = false;
}
if (alert)
{
xformProof.apply(inC, outC, 1);
if ((outC[0]/257 == 0) && (outC[1]/257 == 255) && (outC[2]/257 == 0))
outOfGamutFlag = true;
}
}
return outOfGamutFlag;
}
示例8: isOutOfGamut
bool ScColorEngine::isOutOfGamut(const ScColor& color, const ScribusDoc* doc)
{
bool outOfGamutFlag = false;
if (color.isSpotColor())
return false;
unsigned short inC[4];
unsigned short outC[4];
bool cmsUse = doc ? doc->HasCMS : false;
if (ScCore->haveCMS() && cmsUse)
{
bool alert = true;
ScColorTransform xformProof;
if (color.getColorModel() == colorModelRGB)
{
inC[0] = color.CR * 257;
inC[1] = color.MG * 257;
inC[2] = color.YB * 257;
xformProof = doc->stdProofGC;
if ((color.CR == 0) && (color.YB == 0) && (color.MG == 255))
alert = false;
if ((color.CR == color.MG && color.MG == color.YB))
alert = false;
}
else if (color.getColorModel() == colorModelCMYK)
{
inC[0] = color.CR * 257;
inC[1] = color.MG * 257;
inC[2] = color.YB * 257;
inC[3] = color.K * 257;
xformProof = doc->stdProofCMYKGC;
if ((color.MG == 0) && (color.K == 0) && (color.CR == 255) && (color.YB == 255))
alert = false;
if ((color.MG == 0) && (color.CR == 0) && (color.YB == 0))
alert = false;
if ((color.MG == color.CR) && (color.CR == color.YB) && (color.YB == color.K))
alert = false;
}
else if (color.getColorModel() == colorModelLab)
{
double inC[3];
inC[0] = color.L_val;
inC[1] = color.a_val;
inC[2] = color.b_val;
xformProof = doc->stdProofLabGC;
xformProof.apply(inC, outC, 1);
if ((outC[0]/257 == 0) && (outC[1]/257 == 255) && (outC[2]/257 == 0))
outOfGamutFlag = true;
alert = false;
}
if (alert)
{
xformProof.apply(inC, outC, 1);
if ((outC[0]/257 == 0) && (outC[1]/257 == 255) && (outC[2]/257 == 0))
outOfGamutFlag = true;
}
}
return outOfGamutFlag;
}
示例9: addTransform
void ScColorTransformPool::addTransform(const ScColorTransform& transform, bool force)
{
// Check engine ID. If different, transform was created by another engine
// and we MUST NOT add it to the transform pool
if (m_engineID != transform.engine().engineID())
return;
ScColorTransform trans;
if (!force)
trans = findTransform(transform.transformInfo());
if (trans.isNull())
m_pool.append(transform.weakRef());
}
示例10: ScColor
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;
}
示例11: getCMYKValues
void ScColorEngine::getCMYKValues(const ScColor& color, const ScribusDoc* doc, CMYKColor& cmyk)
{
unsigned short inC[4];
unsigned short outC[4];
colorModel model = color.getColorModel();
ScColorTransform transCMYK = doc ? doc->stdTransCMYK : ScCore->defaultRGBToCMYKTrans;
if (ScCore->haveCMS() && transCMYK)
{
if (model == colorModelRGB)
{
// allow RGB greys to go got to CMYK greys without transform
if (color.CR == color.MG && color.MG == color.YB)
{
cmyk.c = cmyk.m = cmyk.y = 0;
cmyk.k = 255 - color.CR;
}
else
{
inC[0] = color.CR * 257;
inC[1] = color.MG * 257;
inC[2] = color.YB * 257;
transCMYK.apply(inC, outC, 1);
cmyk.c = outC[0] / 257;
cmyk.m = outC[1] / 257;
cmyk.y = outC[2] / 257;
cmyk.k = outC[3] / 257;
}
}
else
{
cmyk.c = color.CR;
cmyk.m = color.MG;
cmyk.y = color.YB;
cmyk.k = color.K;
}
}
else if (model == colorModelRGB)
{
cmyk.k = qMin(qMin(255 - color.CR, 255 - color.MG), 255 - color.YB);
cmyk.c = 255 - color.CR - cmyk.k;
cmyk.m = 255 - color.MG - cmyk.k;
cmyk.y = 255 - color.YB - cmyk.k;
}
else
{
cmyk.c = color.CR;
cmyk.m = color.MG;
cmyk.y = color.YB;
cmyk.k = color.K;
}
}
示例12: convert
bool ScColorSpaceData::convert(ScColorSpaceData& data, eRenderIntent renderIntent, long transformFlags,
void* dataIn, void* dataOut, uint numElems, ScColorTransform* lastTrans)
{
ScColorTransform transform;
if (lastTrans)
transform = *lastTrans;
if (!transform)
transform = createTransform(data, renderIntent, transformFlags);
bool success = false;
if (transform)
{
success = transform.apply(dataIn, dataOut, numElems);
if (!this->hasAlphaChannel() && data.hasAlphaChannel())
data.flattenAlpha(dataOut, numElems);
success = true;
}
return success;
}
示例13: getRGBValues
void ScColorEngine::getRGBValues(const ScColor& color, const ScribusDoc* doc, RGBColor& rgb)
{
colorModel model = color.getColorModel();
ScColorTransform transRGB = doc ? doc->stdTransRGB : ScCore->defaultCMYKToRGBTrans;
if (ScCore->haveCMS() && transRGB)
{
if (model == colorModelRGB)
{
rgb.r = color.CR;
rgb.g = color.MG;
rgb.b = color.YB;
}
else
{
unsigned short inC[4];
unsigned short outC[4];
inC[0] = color.CR * 257;
inC[1] = color.MG * 257;
inC[2] = color.YB * 257;
inC[3] = color.K * 257;
transRGB.apply(inC, outC, 1);
rgb.r = outC[0] / 257;
rgb.g = outC[1] / 257;
rgb.b = outC[2] / 257;
}
}
else if (model == colorModelCMYK)
{
rgb.r = 255 - qMin(255, color.CR + color.K);
rgb.g = 255 - qMin(255, color.MG + color.K);
rgb.b = 255 - qMin(255, color.YB + color.K);
}
else
{
rgb.r = color.CR;
rgb.g = color.MG;
rgb.b = color.YB;
}
}
示例14: getShadeColorCMYK
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;
}
}
示例15: getShadeColorCMYK
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;
}
}