Subversion Repositories Scribus

Compare Revisions

Ignore whitespace Rev 15127 → Rev 15128

/trunk/Scribus/scribus/scimgdataloader_ps.cpp
546,6 → 546,7
else
m_imageInfoRecord.colorspace = ColorSpaceRGB;
m_imageInfoRecord.actualPageNumber = page;
m_pixelFormat = Format_BGRA_8;
return true;
}
if (found)
625,6 → 626,7
m_imageInfoRecord.colorspace = ColorSpaceRGB;
m_image.setDotsPerMeterX ((int) (xres / 0.0254));
m_image.setDotsPerMeterY ((int) (yres / 0.0254));
m_pixelFormat = Format_BGRA_8;
}
}
else
694,6 → 696,7
m_imageInfoRecord.type = ImageType7;
m_image.setDotsPerMeterX ((int) (xres / 0.0254));
m_image.setDotsPerMeterY ((int) (yres / 0.0254));
m_pixelFormat = Format_CMYK_8;
}
else
{
771,6 → 774,7
}
m_imageInfoRecord.colorspace = ColorSpaceCMYK;
m_imageInfoRecord.type = ImageType7;
m_pixelFormat = Format_CMYK_8;
}
else
{
795,6 → 799,7
}
m_imageInfoRecord.type = ImageType7;
m_imageInfoRecord.colorspace = ColorSpaceRGB;
m_pixelFormat = Format_BGRA_8;
}
QFile::remove(tmpFile);
944,6 → 949,7
out[i] = qRgb(in[0], in[1], in[2]);
}
}
m_pixelFormat = Format_BGRA_8;
}
if ( cinfo.output_components == 4 )
{
980,6 → 986,7
}
}
}
m_pixelFormat = Format_CMYK_8;
}
if ( cinfo.output_components == 1 )
{
998,6 → 1005,7
d++;
}
}
m_pixelFormat = Format_BGRA_8;
}
}
(void) jpeg_finish_decompress(&cinfo);
1037,6 → 1045,7
tmpImg.setNumColors(256);
for (int i=0; i<256; i++)
tmpImg.setColor(i, qRgb(i,i,i));
m_pixelFormat = Format_GRAY_8;
}
if (!tmpImg.isNull())
{
1061,6 → 1070,7
out[i] = qRgb(in[0], in[1], in[2]);
}
}
m_pixelFormat = Format_BGRA_8;
}
if ( cinfo.output_components == 4 )
{
1097,6 → 1107,7
}
}
}
m_pixelFormat = Format_CMYK_8;
}
if ( cinfo.output_components == 1 )
{
1237,9 → 1248,15
}
}
if (psMode == 4)
{
m_imageInfoRecord.colorspace = ColorSpaceCMYK;
m_pixelFormat = Format_CMYK_8;
}
else
{
m_imageInfoRecord.colorspace = ColorSpaceRGB;
m_pixelFormat = Format_BGRA_8;
}
m_imageInfoRecord.type = ImageType7;
m_imageInfoRecord.BBoxX = 0;
m_imageInfoRecord.BBoxH = m_image.height();
1486,6 → 1503,7
m_imageInfoRecord.type = ImageType7;
m_image.setDotsPerMeterX ((int) (xres / 0.0254));
m_image.setDotsPerMeterY ((int) (yres / 0.0254));
m_pixelFormat = Format_CMYK_8;
}
 
void ScImgDataLoader_PS::loadDCS1(QString fn, int gsRes)
1586,6 → 1604,7
m_imageInfoRecord.type = ImageType7;
m_image.setDotsPerMeterX ((int) (xres / 0.0254));
m_image.setDotsPerMeterY ((int) (yres / 0.0254));
m_pixelFormat = Format_CMYK_8;
}
 
void ScImgDataLoader_PS::blendImages(QImage &source, ScColor col)
/trunk/Scribus/scribus/scimgdataloader_wpg.cpp
343,5 → 343,6
m_imageInfoRecord.BBoxX = 0;
m_imageInfoRecord.colorspace = ColorSpaceRGB;
m_imageInfoRecord.BBoxH = m_image.height();
m_pixelFormat = Format_BGRA_8;
return true;
}
/trunk/Scribus/scribus/scimgdataloader.h
12,6 → 12,7
#include <QImage>
#include <QStringList>
 
#include "colormgmt/sccolormgmtstructs.h"
#include "scimagestructs.h"
#include "rawimage.h"
 
22,10 → 23,11
 
QStringList m_supportedFormats;
 
QImage m_image;
QImage m_image;
ImageInfoRecord m_imageInfoRecord;
QByteArray m_embeddedProfile;
int m_profileComponents;
QByteArray m_embeddedProfile;
int m_profileComponents;
eColorFormat m_pixelFormat;
 
typedef enum {
noMsg = 0,
48,14 → 50,16
const QStringList& supportedFormats(void) const { return m_supportedFormats; }
bool supportFormat(const QString& fmt);
 
QImage& image(void) { return m_image; }
RawImage r_image;
QByteArray& embeddedProfile(void) { return m_embeddedProfile; }
RawImage r_image;
 
QImage& image(void) { return m_image; }
QByteArray& embeddedProfile(void) { return m_embeddedProfile; }
ImageInfoRecord& imageInfoRecord(void) { return m_imageInfoRecord; }
void setRequest(bool valid, QMap<int, ImageLoadRequest> req);
eColorFormat pixelFormat(void) { return m_pixelFormat; }
void setRequest(bool valid, QMap<int, ImageLoadRequest> req);
 
bool issuedErrorMsg(void) const { return (m_msgType == errorMsg); }
bool issuedWarningMsg(void) const { return (m_msgType == warningMsg); }
bool issuedErrorMsg(void) const { return (m_msgType == errorMsg); }
bool issuedWarningMsg(void) const { return (m_msgType == warningMsg); }
const QString& getMessage(void) const { return m_message; }
 
virtual void initialize(void);
/trunk/Scribus/scribus/scimgdataloader.cpp
19,6 → 19,7
m_imageInfoRecord.init();
m_embeddedProfile.resize(0);
m_profileComponents = 0;
m_pixelFormat = Format_Undefined;
}
 
void ScImgDataLoader::setRequest(bool valid, QMap<int, ImageLoadRequest> req)
/trunk/Scribus/scribus/scribusdoc.cpp
729,14 → 729,14
DocDisplayProf, Format_RGB_16,
IntentColors, dcmsFlags);
// TODO : check input profiles used for images
stdProofImg = colorEngine.createProofingTransform(DocInputImageRGBProf, Format_RGBA_8,
DocDisplayProf, Format_RGBA_8, DocPrinterProf,
stdProofImg = colorEngine.createProofingTransform(DocInputImageRGBProf, Format_BGRA_8,
DocDisplayProf, Format_BGRA_8, DocPrinterProf,
IntentImages, Intent_Relative_Colorimetric, dcmsFlagsGC);
stdProofImgCMYK = colorEngine.createProofingTransform(DocInputImageCMYKProf, Format_CMYK_8,
DocDisplayProf, Format_RGBA_8, DocPrinterProf,
DocDisplayProf, Format_BGRA_8, DocPrinterProf,
IntentImages, Intent_Relative_Colorimetric, dcmsFlagsGC);
stdTransImg = colorEngine.createTransform(DocInputRGBProf, Format_RGBA_8,
DocDisplayProf, Format_RGBA_8,
stdTransImg = colorEngine.createTransform(DocInputRGBProf, Format_BGRA_8,
DocDisplayProf, Format_BGRA_8,
IntentImages, dcmsFlags);
stdTransRGB = colorEngine.createTransform(DocInputCMYKProf, Format_CMYK_16,
DocInputRGBProf, Format_RGB_16,
/trunk/Scribus/scribus/scimgdataloader_pict.cpp
141,6 → 141,7
m_imageInfoRecord.BBoxX = 0;
m_imageInfoRecord.colorspace = ColorSpaceRGB;
m_imageInfoRecord.BBoxH = m_image.height();
m_pixelFormat = Format_BGRA_8;
f.close();
return true;
}
/trunk/Scribus/scribus/scimgdataloader_pdf.cpp
108,6 → 108,7
m_imageInfoRecord.colorspace = ColorSpaceRGB;
m_image.setDotsPerMeterX ((int) (xres / 0.0254));
m_image.setDotsPerMeterY ((int) (yres / 0.0254));
m_pixelFormat = Format_BGRA_8;
return true;
}
return false;
/trunk/Scribus/scribus/scimgdataloader_tiff.h
49,6 → 49,8
virtual bool preloadAlphaChannel(const QString& fn, int page, int res, bool& hasAlpha);
virtual void loadEmbeddedProfile(const QString& fn, int page = 0);
virtual bool loadPicture(const QString& fn, int page, int res, bool thumbnail);
 
virtual bool useRawImage() { return true; }
};
 
#endif
/trunk/Scribus/scribus/scimgdataloader_tiff.cpp
209,6 → 209,7
if (bitspersample == 1)
bilevel = true;
isCMYK = false;
m_pixelFormat = Format_RGBA_8;
}
else
{
285,6 → 286,7
}
}
isCMYK = true;
m_pixelFormat = Format_CMYK_8;
}
}
else
293,6 → 295,7
return false;
if (bitspersample == 1)
bilevel = true;
m_pixelFormat = Format_RGBA_8;
}
return true;
}
715,9 → 718,15
if (!m_imageInfoRecord.exifInfo.thumbnail.isNull())
{
if (isCMYK)
{
r_image.create(m_imageInfoRecord.exifInfo.thumbnail.width(), m_imageInfoRecord.exifInfo.thumbnail.height(), 5);
m_pixelFormat = Format_CMYKA_8;;
}
else
{
r_image.create(m_imageInfoRecord.exifInfo.thumbnail.width(), m_imageInfoRecord.exifInfo.thumbnail.height(), 4);
m_pixelFormat = (m_imageInfoRecord.colorspace == ColorSpaceCMYK) ? Format_CMYK_8 : Format_RGBA_8;
}
r_image.fill(0);
QRgb *s;
uchar *d;
/trunk/Scribus/scribus/scimgdataloader_gimp.cpp
109,6 → 109,7
m_imageInfoRecord.BBoxX = 0;
m_imageInfoRecord.colorspace = ColorSpaceRGB;
m_imageInfoRecord.BBoxH = m_image.height();
m_pixelFormat = Format_BGRA_8;
return true;
}
return true;
/trunk/Scribus/scribus/scimgdataloader_qt.cpp
55,6 → 55,7
m_imageInfoRecord.lowResType = resInf;
m_imageInfoRecord.BBoxX = 0;
m_imageInfoRecord.BBoxH = m_image.height();
m_pixelFormat = Format_BGRA_8;
return true;
}
return false; //TODO: I think this should be false!
/trunk/Scribus/scribus/scimgdataloader_psd.cpp
172,11 → 172,8
m_imageInfoRecord.profileName = prof.productDescription();
m_imageInfoRecord.isEmbedded = true;
}
isCMYK = (header.color_mode == CM_CMYK);
if (header.color_mode == CM_CMYK)
isCMYK = true;
else
isCMYK = false;
if (header.color_mode == CM_CMYK)
m_imageInfoRecord.colorspace = ColorSpaceCMYK;
else if (header.color_mode == CM_RGB)
m_imageInfoRecord.colorspace = ColorSpaceRGB;
192,9 → 189,15
if (!m_imageInfoRecord.exifInfo.thumbnail.isNull())
{
if (isCMYK)
{
r_image.create(m_imageInfoRecord.exifInfo.thumbnail.width(), m_imageInfoRecord.exifInfo.thumbnail.height(), 5);
m_pixelFormat = Format_CMYKA_8;
}
else
{
r_image.create(m_imageInfoRecord.exifInfo.thumbnail.width(), m_imageInfoRecord.exifInfo.thumbnail.height(), 4);
m_pixelFormat = Format_RGBA_8;
}
QRgb *s;
unsigned char cc, cm, cy, ck;
uchar *d;
249,11 → 252,13
{
if (!r_image.create(header.width, header.height, 5))
return false;
m_pixelFormat = Format_CMYKA_8;
}
else
{
if (!r_image.create(header.width, header.height, 4))
return false;
m_pixelFormat = Format_RGBA_8;
}
r_image.fill(0);
maxChannels = header.channel_count;
/trunk/Scribus/scribus/scimage.cpp
2204,31 → 2204,22
if (cmSettings.useColorManagement() && inputProf && screenProf && printerProf)
{
ScColorMgmtEngine engine(cmSettings.doc() ? cmSettings.doc()->colorEngine : ScCore->defaultEngine);
bool isPsdTiff = (extensionIndicatesPSD(ext) || extensionIndicatesTIFF(ext));
eColorFormat inputProfFormat = Format_BGRA_8;
eColorFormat inputProfFormat = pDataLoader->pixelFormat();
eColorFormat outputProfFormat = Format_YMCK_8;
eColorSpaceType inputProfColorSpace = inputProf.colorSpace();
if ( inputProfColorSpace == ColorSpace_Rgb )
inputProfFormat = isPsdTiff ? Format_RGBA_8 : Format_BGRA_8; // Later make tiff and psd loader use Format_BGRA_8
else if (( inputProfColorSpace == ColorSpace_Cmyk ) && (isPsdTiff || pDataLoader->useRawImage()))
{
if (pDataLoader->r_image.channels() == 5)
inputProfFormat = Format_CMYKA_8;
else
inputProfFormat = Format_CMYK_8;
}
else if ( inputProfColorSpace == ColorSpace_Cmyk )
inputProfFormat = Format_YMCK_8;
else if ( inputProfColorSpace == ColorSpace_Gray )
inputProfFormat = Format_GRAY_8;
eColorSpaceType inputProfColorSpace = inputProf.colorSpace();
eColorSpaceType outputProfColorSpace = printerProf.colorSpace();
if ( inputProfColorSpace == ColorSpace_Gray)
inputProfFormat = Format_GRAY_8; // Grayscale is still a bit tricky
if ( outputProfColorSpace == ColorSpace_Rgb )
outputProfFormat = Format_BGRA_8;
else if ( outputProfColorSpace == ColorSpace_Cmyk )
outputProfFormat = Format_YMCK_8;
ScColorSpace inputCSpace = engine.createColorSpace(inputProf, inputProfFormat);
ScColorSpace screenCSpace = engine.createColorSpace(screenProf, Format_BGRA_8);
ScColorSpace outputCSpace;
if (cmSettings.useColorManagement() && cmSettings.doSoftProofing())
{
cmsProofFlags |= Ctf_Softproofing;;
cmsProofFlags |= Ctf_Softproofing;
if (cmSettings.doGamutCheck())
{
cmsProofFlags |= Ctf_GamutCheck;
2240,7 → 2231,7
{
case CMYKData: // CMYK
// if ((!isCMYK && (outputProfColorSpace == icSigCmykData)) || (isCMYK && (outputProfColorSpace == icSigRgbData)) )
xform = engine.createTransform(inputProf, inputProfFormat, printerProf, outputProfFormat, cmSettings.imageRenderingIntent(), cmsFlags);
xform = inputCSpace.createTransform(printerProf, outputProfFormat, cmSettings.imageRenderingIntent(), cmsFlags);
if (outputProfColorSpace != ColorSpace_Cmyk )
*realCMYK = isCMYK = false;
break;
2250,22 → 2241,22
{
if ((imgInfo.profileName == cmSettings.defaultImageRGBProfile()) || (imgInfo.profileName == cmSettings.defaultImageCMYKProfile()))
{
if (isCMYK)
if (isCMYK && (inputProfFormat == Format_CMYK_8))
xform = cmSettings.cmykImageProofingTransform();
else
else if (inputProfFormat == Format_BGRA_8)
xform = cmSettings.rgbImageProofingTransform();
xform.changeBufferFormat(inputProfFormat, Format_BGRA_8);
}
else
xform = engine.createProofingTransform(inputProf, inputProfFormat,
screenProf, Format_BGRA_8, printerProf,
if (!xform)
{
xform = inputCSpace.createProofingTransform(screenCSpace, printerProf,
cmSettings.intent(), Intent_Relative_Colorimetric, cmsFlags | cmsProofFlags);
}
}
else if (cmSettings.softProofingAllowed() || isCMYK)
xform = engine.createTransform(inputProf, inputProfFormat, screenProf, Format_BGRA_8, cmSettings.intent(), cmsFlags);
xform = inputCSpace.createTransform(screenCSpace, cmSettings.intent(), cmsFlags);
else
{
if (extensionIndicatesPSD(ext) || extensionIndicatesTIFF(ext) || pDataLoader->useRawImage())
if (pDataLoader->useRawImage())
{
QImage::operator=(pDataLoader->r_image.convertToQImage(false));
profileName = imgInfo.profileName;
2278,10 → 2269,11
}
}
outputProfColorSpace = ColorSpace_Rgb;
outputCSpace = screenCSpace;
break;
case RawData: // no Conversion just raw Data
xform = 0;
if (extensionIndicatesPSD(ext) || extensionIndicatesTIFF(ext) || pDataLoader->useRawImage())
if (pDataLoader->useRawImage())
{
QImage::operator=(pDataLoader->r_image.convertToQImage(true, true));
profileName = imgInfo.profileName;
2300,15 → 2292,16
outputProfFormat = Format_BGRA_8;
else if ( outputProfColorSpace == ColorSpace_Cmyk )
outputProfFormat = Format_YMCK_8;
xform = engine.createTransform(inputProf, inputProfFormat, outputProfile, outputProfFormat, cmSettings.imageRenderingIntent(), cmsFlags);
xform = inputCSpace.createTransform(outputProfile, outputProfFormat, cmSettings.imageRenderingIntent(), cmsFlags);
isCMYK = (outputProfColorSpace == ColorSpace_Cmyk);
if (realCMYK)
*realCMYK = isCMYK;
outputCSpace = engine.createColorSpace(outputProfile, outputProfFormat);
break;
}
if (xform)
if (xform && outputCSpace)
{
if (extensionIndicatesPSD(ext) || extensionIndicatesTIFF(ext) || pDataLoader->useRawImage())
if (pDataLoader->useRawImage())
{
QImage::operator=(QImage(pDataLoader->r_image.width(), pDataLoader->r_image.height(), QImage::Format_ARGB32));
profileName = imgInfo.profileName;
2323,8 → 2316,7
for (int i = 0; i < height(); i++)
{
uchar* ptr = scanLine(i);
if (extensionIndicatesPSD(ext) || extensionIndicatesTIFF(ext) || pDataLoader->useRawImage())
ptr2 = pDataLoader->r_image.scanLine(i);
ptr2 = pDataLoader->useRawImage() ? pDataLoader->r_image.scanLine(i) : NULL;
if ( inputProfFormat == Format_GRAY_8 && (outputProfColorSpace != ColorSpace_Cmyk) )
{
unsigned char* ucs = ptr2 ? (ptr2 + 1) : (ptr + 1);
2352,30 → 2344,12
}
else
{
if (extensionIndicatesPSD(ext) || extensionIndicatesTIFF(ext) || pDataLoader->useRawImage()) //TODO: Unsure about this one
{
xform.apply(ptr2, ptr, width());
}
else
xform.apply(ptr, ptr, width());
inputCSpace.convert(outputCSpace, (eRenderIntent) 0, 0, ptr2 ? ptr2 : ptr, ptr, width(), &xform);
}
// if transforming from CMYK to RGB, flatten the alpha channel
// which will still contain the black channel
if (!(extensionIndicatesPSD(ext) || extensionIndicatesTIFF(ext) || pDataLoader->useRawImage()))
if (pDataLoader->useRawImage())
{
QRgb alphaFF = qRgba(0,0,0,255);
QRgb *p;
if (isCMYK && outputProfColorSpace != ColorSpace_Cmyk && !bilevel)
{
p = (QRgb *) ptr;
for (int j = 0; j < width(); j++, p++)
*p |= alphaFF;
}
}
else
{
// This might fix Bug #6328, please test.
if (outputProfColorSpace != ColorSpace_Cmyk && bilevel)
/*if (outputProfColorSpace != ColorSpace_Cmyk && bilevel)
{
QRgb alphaFF;
QRgb *p;
2386,38 → 2360,26
*p |= alphaFF;
ptr2 += 4;
}
}
if (outputProfColorSpace != ColorSpace_Cmyk && !bilevel)
}*/
// FIXME not valid if input or output colorspace are not 8bit / channels
if (inputCSpace.hasAlphaChannel() && outputCSpace.hasAlphaChannel())
{
if (pDataLoader->r_image.channels() == 5)
uint inputAlphaI = inputCSpace.alphaIndex();
uint outputAlphaI = outputCSpace.alphaIndex();
uint inputBytes = inputCSpace.bytesPerChannel() * inputCSpace.numChannels();
uint outputBytes = outputCSpace.bytesPerChannel() * outputCSpace.numChannels();
uchar* in = ptr2 + inputAlphaI * inputCSpace.bytesPerChannel();
uchar* out = ptr + outputAlphaI * outputCSpace.bytesPerChannel();
for (int j = 0; j < width(); ++j)
{
QRgb *p = (QRgb *) ptr;
for (int j = 0; j < width(); j++, p++)
{
*p = qRgba(qRed(*p), qGreen(*p), qBlue(*p), ptr2[4]);
ptr2 += 5;
}
*out = *in;
in += inputBytes;
out += outputBytes;
}
else
{
QRgb *p = (QRgb *) ptr;
for (int j = 0; j < width(); j++, p++)
{
if (isCMYK)
*p = qRgba(qRed(*p), qGreen(*p), qBlue(*p), 255);
else
*p = qRgba(qRed(*p), qGreen(*p), qBlue(*p), ptr2[3]);
ptr2 += 4;
}
}
}
}
}
}
if (isCMYK)
cmSettings.cmykImageProofingTransform().changeBufferFormat(Format_CMYK_8, Format_RGBA_8);
else
cmSettings.rgbImageProofingTransform().changeBufferFormat(Format_RGBA_8, Format_RGBA_8);
}
else
{
/trunk/Scribus/scribus/scimgdataloader_jpeg.cpp
341,6 → 341,7
}
else
m_image = m_imageInfoRecord.exifInfo.thumbnail.copy();
m_pixelFormat = Format_BGRA_8;
}
m_imageInfoRecord.valid = (m_imageInfoRecord.PDSpathData.size())>0?true:false; // The only interest is vectormask
arrayPhot.clear();
388,6 → 389,7
out[i] = qRgb(in[0], in[1], in[2]);
}
}
m_pixelFormat = Format_BGRA_8;
}
if ( cinfo.output_components == 4 )
{
447,6 → 449,7
}
}
}
m_pixelFormat = Format_YMCK_8;
isCMYK = true;
}
else
468,6 → 471,7
d++;
}
}
m_pixelFormat = Format_GRAY_8;;
}
}
(void) jpeg_finish_decompress(&cinfo);
/trunk/Scribus/scribus/colormgmt/sccolortransformdata.h
27,8 → 27,6
 
virtual bool apply(void* input, void* output, uint numElem) = 0;
virtual bool apply(QByteArray& input, QByteArray& output, uint numElem) = 0;
 
virtual void changeBufferFormat(eColorFormat input, eColorFormat output) = 0;
};
 
#endif
/trunk/Scribus/scribus/colormgmt/sccolortransform.cpp
29,11 → 29,6
return m_data->apply(input, output, numElem);
}
 
void ScColorTransform::changeBufferFormat(eColorFormat input, eColorFormat output)
{
return m_data->changeBufferFormat(input, output);
}
 
bool ScColorTransform::operator==(const ScColorTransform& other) const
{
return m_data == other.m_data;
/trunk/Scribus/scribus/colormgmt/sccolorspacedata_gray.h
13,6 → 13,7
public:
ScColorSpaceDataTempl_Gray(ScColorProfile& profile);
 
virtual uint alphaIndex(void) const { return 0; }
virtual void flattenAlpha(void* dataIn, uint numElems) const {};
};
 
/trunk/Scribus/scribus/colormgmt/sccolorspacedata_cmyk.h
19,6 → 19,7
public:
ScColorSpaceDataTempl_CMYK(ScColorProfile& profile);
 
virtual uint alphaIndex(void) const { return 0; }
virtual void flattenAlpha(void* dataIn, uint numElems) const {};
};
 
/trunk/Scribus/scribus/colormgmt/sclcmscolortransformimpl.h
25,8 → 25,6
virtual bool apply(void* input, void* output, uint numElem);
virtual bool apply(QByteArray& input, QByteArray& output, uint numElem);
 
virtual void changeBufferFormat(eColorFormat input, eColorFormat output);
 
protected:
cmsHTRANSFORM m_transformHandle;
 
/trunk/Scribus/scribus/colormgmt/sccolormgmtenginefactory.cpp
5,8 → 5,14
for which a new license (GPL+exception) is in place.
*/
 
#include "scconfig.h"
#include "sccolormgmtenginefactory.h"
 
#ifdef HAVE_LCMS2
#include "sclcms2colormgmtengineimpl.h"
#else
#include "sclcmscolormgmtengineimpl.h"
#endif
 
ScColorMgmtEngineFactory colorMgmtEngineFactory;
 
18,6 → 24,11
 
ScColorMgmtEngine ScColorMgmtEngineFactory::createDefaultEngine()
{
#ifdef HAVE_LCMS2
ScColorMgmtEngine lcms2Engine(new ScLcms2ColorMgmtEngineImpl());
return lcms2Engine;
#else
ScColorMgmtEngine lcmsEngine(new ScLcmsColorMgmtEngineImpl());
return lcmsEngine;
#endif
}
/trunk/Scribus/scribus/colormgmt/sccolorspacedata.h
33,6 → 33,9
virtual ScColorMgmtEngine& engine() { return m_profile.engine(); }
virtual const ScColorMgmtEngine& engine() const { return m_profile.engine(); }
 
// Index of alpha data
virtual uint alphaIndex(void) const = 0;
 
// Restore full opacity of alpha channel
virtual void flattenAlpha(void* dataIn, uint numElems) const = 0;
 
/trunk/Scribus/scribus/colormgmt/sccolorspace.cpp
61,6 → 61,13
return false;
}
 
uint ScColorSpace::alphaIndex(void) const
{
if (m_data)
return m_data->alphaIndex();
return 0;
}
 
void ScColorSpace::flattenAlpha(void* dataIn, uint numElems)
{
if (m_data)
/trunk/Scribus/scribus/colormgmt/CMakeLists.txt
4,6 → 4,20
${LCMS_INCLUDE_DIR}
)
 
IF(HAVE_LCMS2)
SET(SCRIBUS_LCMS_IMPL_SOURCES
sclcms2colormgmtengineimpl.cpp
sclcms2colorprofileimpl.cpp
sclcms2colortransformimpl.cpp
)
ELSE(HAVE_LCMS2)
SET(SCRIBUS_LCMS_IMPL_SOURCES
sclcmscolormgmtengineimpl.cpp
sclcmscolorprofileimpl.cpp
sclcmscolortransformimpl.cpp
)
ENDIF(HAVE_LCMS2)
 
SET(SCRIBUS_COLORMGMT_LIB_SOURCES
sccolormgmtengine.cpp
sccolormgmtenginedata.cpp
20,7 → 34,9
sclcmscolormgmtengineimpl.cpp
sclcmscolorprofileimpl.cpp
sclcmscolortransformimpl.cpp
${SCRIBUS_LCMS_IMPL_SOURCES}
)
 
SET(SCRIBUS_COLORMGMT_LIB "scribus_colormgmt_lib")
ADD_LIBRARY(${SCRIBUS_COLORMGMT_LIB} STATIC ${SCRIBUS_COLORMGMT_LIB_SOURCES})
# This is a convenience library that for linkage purposes is part of Scribus's
/trunk/Scribus/scribus/colormgmt/sccolorspacedata_laba.h
19,6 → 19,7
public:
ScColorSpaceDataTempl_LabA(ScColorProfile& profile);
 
virtual uint alphaIndex(void) const { return m_AIndex; }
virtual void flattenAlpha(void* dataIn, uint numElems) const;
};
 
/trunk/Scribus/scribus/colormgmt/sclcmscolortransformimpl.cpp
44,16 → 44,6
return false;
}
 
void ScLcmsColorTransformImpl::changeBufferFormat(eColorFormat input, eColorFormat output)
{
if (m_transformHandle)
{
DWORD lcmsInput = ScLcmsColorMgmtEngineImpl::translateFormatToLcmsFormat(input);
DWORD lcmsOutput = ScLcmsColorMgmtEngineImpl::translateFormatToLcmsFormat(output);
cmsChangeBuffersFormat(m_transformHandle, lcmsInput, lcmsOutput);
}
}
 
void ScLcmsColorTransformImpl::deleteTransform(void)
{
if (m_transformHandle)
/trunk/Scribus/scribus/colormgmt/sccolorspacedata_cmyka.h
20,6 → 20,7
public:
ScColorSpaceDataTempl_CMYKA(ScColorProfile& profile);
 
virtual uint alphaIndex(void) const { return m_aIndex; }
virtual void flattenAlpha(void* dataIn, uint numElems) const;
};
 
/trunk/Scribus/scribus/colormgmt/sccolortransform.h
32,9 → 32,6
bool apply(void* input, void* output, uint numElem);
bool apply(QByteArray& input, QByteArray& output, uint numElem);
 
// FIXME get rif of this API as soon as possible (cf scimage)
void changeBufferFormat(eColorFormat input, eColorFormat output);
 
bool operator==(const ScColorTransform& other) const;
 
protected:
/trunk/Scribus/scribus/colormgmt/sccolorspacedata_rgb.h
18,6 → 18,7
public:
ScColorSpaceDataTempl_RGB(ScColorProfile& profile);
 
virtual uint alphaIndex(void) const { return 0; }
virtual void flattenAlpha(void* dataIn, uint numElems) const {};
};
 
/trunk/Scribus/scribus/colormgmt/sccolorspacedata_rgba.h
19,6 → 19,7
public:
ScColorSpaceDataTempl_RGBA(ScColorProfile& profile);
 
virtual uint alphaIndex(void) const { return m_aIndex; }
virtual void flattenAlpha(void* dataIn, uint numElems) const;
};
 
/trunk/Scribus/scribus/colormgmt/sclcmscolormgmtengineimpl.cpp
553,27 → 553,27
eColorSpaceType ScLcmsColorMgmtEngineImpl::translateLcmsColorSpaceType(icColorSpaceSignature signature)
{
eColorSpaceType colorSpaceType = ColorSpace_Unknown;
if (signature == icSigXYZData)
colorSpaceType = ColorSpace_XYZ;
if (signature == icSigLabData)
colorSpaceType = ColorSpace_Lab;
if (signature == icSigLuvData)
colorSpaceType = ColorSpace_Luv;
if (signature == icSigYCbCrData)
colorSpaceType = ColorSpace_YCbCr;
if (signature == icSigYxyData)
colorSpaceType = ColorSpace_Yxy;
if (signature == icSigRgbData)
colorSpaceType = ColorSpace_Rgb;
if (signature == icSigGrayData)
colorSpaceType = ColorSpace_Gray;
if (signature == icSigHsvData)
colorSpaceType = ColorSpace_Hsv;
if (signature == icSigHlsData)
colorSpaceType = ColorSpace_Hls;
if (signature == icSigCmykData)
colorSpaceType = ColorSpace_Cmyk;
if (signature == icSigCmyData)
if (signature == icSigXYZData)
colorSpaceType = ColorSpace_XYZ;
if (signature == icSigLabData)
colorSpaceType = ColorSpace_Lab;
if (signature == icSigLuvData)
colorSpaceType = ColorSpace_Luv;
if (signature == icSigYCbCrData)
colorSpaceType = ColorSpace_YCbCr;
if (signature == icSigYxyData)
colorSpaceType = ColorSpace_Yxy;
if (signature == icSigRgbData)
colorSpaceType = ColorSpace_Rgb;
if (signature == icSigGrayData)
colorSpaceType = ColorSpace_Gray;
if (signature == icSigHsvData)
colorSpaceType = ColorSpace_Hsv;
if (signature == icSigHlsData)
colorSpaceType = ColorSpace_Hls;
if (signature == icSigCmykData)
colorSpaceType = ColorSpace_Cmyk;
if (signature == icSigCmyData)
colorSpaceType = ColorSpace_Cmy;
return colorSpaceType;
}
581,19 → 581,19
eProfileClass ScLcmsColorMgmtEngineImpl::translateLcmsProfileClass(icProfileClassSignature signature)
{
eProfileClass profileClass = Class_Unknown;
if (signature == icSigInputClass)
profileClass = Class_Input;
if (signature == icSigDisplayClass)
profileClass = Class_Display;
if (signature == icSigOutputClass)
profileClass = Class_Output;
if (signature == icSigLinkClass)
profileClass = Class_Link;
if (signature == icSigAbstractClass)
profileClass = Class_Abstract;
if (signature == icSigColorSpaceClass)
profileClass = Class_ColorSpace;
if (signature == icSigNamedColorClass)
if (signature == icSigInputClass)
profileClass = Class_Input;
if (signature == icSigDisplayClass)
profileClass = Class_Display;
if (signature == icSigOutputClass)
profileClass = Class_Output;
if (signature == icSigLinkClass)
profileClass = Class_Link;
if (signature == icSigAbstractClass)
profileClass = Class_Abstract;
if (signature == icSigColorSpaceClass)
profileClass = Class_ColorSpace;
if (signature == icSigNamedColorClass)
profileClass = Class_NamedColor;
return profileClass;
}
/trunk/Scribus/scribus/colormgmt/sccolorspace.h
34,7 → 34,9
 
uint numChannels(void) const;
uint bytesPerChannel(void) const;
 
bool hasAlphaChannel(void) const;
uint alphaIndex(void) const;
 
// Restore full opacity of alpha channel
void flattenAlpha(void* dataIn, uint numElems);
/trunk/Scribus/scribus/scimgdataloader_psd.h
35,6 → 35,8
virtual void loadEmbeddedProfile(const QString& fn, int page = 0);
virtual bool loadPicture(const QString& fn, int page, int res, bool thumbnail);
 
virtual bool useRawImage() { return true; }
 
protected:
 
QList<unsigned int> colorTable;