Subversion Repositories Scribus

Compare Revisions

Ignore whitespace Rev 19735 → Rev 19737

/trunk/Scribus/scribus/scimage.cpp
2288,7 → 2288,10
else if (fmtImg.contains(ext))
pDataLoader.reset( new ScImgDataLoader_QT() );
else
{
pDataLoader.reset( new ScImgDataLoader_GMagick() );
pDataLoader->setRequest(imgInfo.isRequest, imgInfo.RequestProps);
}
#else
else
pDataLoader.reset( new ScImgDataLoader_QT() );
/trunk/Scribus/scribus/scimgdataloader_gmagick.cpp
125,16 → 125,20
return false;
}
 
QRgb *s = (QRgb*)(output->scanLine(0));
int i;
for (i = 0; i < width*height; i++) {
*buffer++ = ScaleQuantumToChar(GetBlueSample(pixels[i]));
*buffer++ = ScaleQuantumToChar(GetGreenSample(pixels[i]));
*buffer++ = ScaleQuantumToChar(GetRedSample(pixels[i]));
if (hasAlpha) {
*buffer++ = 255 - ScaleQuantumToChar(GetRGBAlphaSample(pixels[i]));
} else {
*buffer++ = 255;
}
for (i = 0; i < width*height; i++)
{
unsigned char b = ScaleQuantumToChar(GetBlueSample(pixels[i]));
unsigned char g = ScaleQuantumToChar(GetGreenSample(pixels[i]));
unsigned char r = ScaleQuantumToChar(GetRedSample(pixels[i]));
unsigned char a;
if (hasAlpha)
a = 255 - ScaleQuantumToChar(GetRGBAlphaSample(pixels[i]));
else
a = 255;
*s = qRgba(r, g, b, a);
s++;
}
return true;
}
142,13 → 146,19
 
bool ScImgDataLoader_GMagick::loadPicture(const QString& fn, int /*page*/, int res, bool thumbnail)
{
initGraphicsMagick();
qDebug() << "Loading image" << fn << "Tumbnail:" << thumbnail;
 
if (!QFile::exists(fn))
return false;
 
bool valid = m_imageInfoRecord.isRequest;
QMap<int, ImageLoadRequest> req = m_imageInfoRecord.RequestProps;
initialize();
m_imageInfoRecord.RequestProps = req;
m_imageInfoRecord.isRequest = valid;
m_imageInfoRecord.type = ImageTypeOther;
m_imageInfoRecord.exifDataValid = false;
m_imageInfoRecord.layerInfo.clear();
m_imageInfoRecord.PDSpathData.clear();
initGraphicsMagick();
// qDebug() << "Loading image" << fn << "Tumbnail:" << thumbnail;
 
ExceptionInfo exception;
GetExceptionInfo(&exception);
158,33 → 168,142
Image *image = ReadImage(image_info, &exception);
if (exception.severity != UndefinedException)
CatchException(&exception);
if (!image) {
if (!image)
{
qCritical() << "Failed to read image" << fn;
return false;
}
image = FlattenImages(image, &exception);
// qDebug() << "has matte(alpha):" << image->matte;
int width = image->columns;
int height = image->rows;
 
double xres = image->x_resolution;
double yres = image->y_resolution;
 
if (image->colorspace == CMYKColorspace) {
if (thumbnail)
image = FlattenImages(image, &exception);
else
{
struct PSDLayer layer;
layerCount = 0;
Image *flatten_image = CloneImage(image, 0, 0, true, &exception);
Image *next;
if ((flatten_image != (Image *) NULL) && (image->next != (Image *) NULL))
{
bool visible = true;
double opacity = 1.0;
QString compositeOp = "norm";
QString layerName = QString("layer%1").arg(layerCount+1);
if ((m_imageInfoRecord.isRequest) && (m_imageInfoRecord.RequestProps.contains(layerCount)))
opacity = m_imageInfoRecord.RequestProps[layerCount].opacity / 255.0;
if ((m_imageInfoRecord.isRequest) && (m_imageInfoRecord.RequestProps.contains(layerCount)))
visible = m_imageInfoRecord.RequestProps[layerCount].visible;
if ((m_imageInfoRecord.isRequest) && (m_imageInfoRecord.RequestProps.contains(layerCount)))
compositeOp = m_imageInfoRecord.RequestProps[layerCount].blend;
layer.layerName = layerName;
layer.channelType.clear();
layer.channelLen.clear();
layer.opacity = opacity;
layer.blend = "norm";
layer.maskYpos = 0;
layer.maskXpos = 0;
layer.maskHeight = 0;
layer.maskWidth = 0;
layer.flags = visible ? 0 : 2;
QImage imt;
if (image->colorspace == CMYKColorspace)
{
RawImage r2_image;
readCMYK(flatten_image, &r2_image, width, height);
imt = r2_image.convertToQImage(true);
}
else
{
m_useRawImage = false;
imt = QImage(width, height, QImage::Format_ARGB32);
readRGB(flatten_image, &imt, width, height);
}
double sx = imt.width() / 40.0;
double sy = imt.height() / 40.0;
layer.thumb = sy < sx ? imt.scaled(qRound(imt.width() / sx), qRound(imt.height() / sx), Qt::IgnoreAspectRatio, Qt::SmoothTransformation) :
imt.scaled(qRound(imt.width() / sy), qRound(imt.height() / sy), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
m_imageInfoRecord.layerInfo.append(layer);
layerCount++;
if (!visible)
{
(void)CompositeImage(flatten_image, ClearCompositeOp, flatten_image, flatten_image->page.x, flatten_image->page.y);
}
for (next = image->next; next != (Image*)NULL; next = next->next)
{
visible = true;
opacity = 1.0;
compositeOp = "norm";
layerName = QString("layer%1").arg(layerCount+1);
if ((m_imageInfoRecord.isRequest) && (m_imageInfoRecord.RequestProps.contains(layerCount)))
opacity = m_imageInfoRecord.RequestProps[layerCount].opacity / 255.0;
if ((m_imageInfoRecord.isRequest) && (m_imageInfoRecord.RequestProps.contains(layerCount)))
visible = m_imageInfoRecord.RequestProps[layerCount].visible;
if ((m_imageInfoRecord.isRequest) && (m_imageInfoRecord.RequestProps.contains(layerCount)))
compositeOp = m_imageInfoRecord.RequestProps[layerCount].blend;
layer.layerName = layerName;
layer.channelType.clear();
layer.channelLen.clear();
layer.opacity = opacity;
layer.blend = "norm";
layer.maskYpos = 0;
layer.maskXpos = 0;
layer.maskHeight = 0;
layer.maskWidth = 0;
layer.flags = visible ? 0 : 2;
if (image->colorspace == CMYKColorspace)
{
RawImage r2_image;
readCMYK(next, &r2_image, width, height);
imt = r2_image.convertToQImage(true);
}
else
{
m_useRawImage = false;
imt = QImage(width, height, QImage::Format_ARGB32);
readRGB(next, &imt, width, height);
}
double sx = imt.width() / 40.0;
double sy = imt.height() / 40.0;
layer.thumb = sy < sx ? imt.scaled(qRound(imt.width() / sx), qRound(imt.height() / sx), Qt::IgnoreAspectRatio, Qt::SmoothTransformation) :
imt.scaled(qRound(imt.width() / sy), qRound(imt.height() / sy), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
m_imageInfoRecord.layerInfo.append(layer);
layerCount++;
if (visible)
(void)CompositeImage(flatten_image, next->compose, next, next->page.x, next->page.y);
}
image = CloneImage(flatten_image, 0, 0, true, &exception);
}
}
// qDebug() << "has matte(alpha):" << image->matte;
 
if (image->colorspace == CMYKColorspace)
{
qDebug() << "CMYK image";
m_useRawImage = true;
if (!readCMYK(image, &r_image, width, height)) return false;
if (!readCMYK(image, &r_image, width, height))
return false;
m_imageInfoRecord.colorspace = ColorSpaceCMYK;
m_pixelFormat = (r_image.channels() == 5) ? Format_CMYKA_8 : Format_CMYK_8;
} else {
}
else
{
m_useRawImage = false;
m_image = QImage(width, height, QImage::Format_ARGB32);
if (!readRGB(image, &m_image, width, height)) return false;
if (!readRGB(image, &m_image, width, height))
return false;
m_imageInfoRecord.colorspace = ColorSpaceRGB;
m_pixelFormat = Format_BGRA_8;
}
m_imageInfoRecord.exifDataValid = false;
if (thumbnail)
{
m_imageInfoRecord.exifDataValid = true;
m_imageInfoRecord.exifInfo.thumbnail = m_image;
}
m_imageInfoRecord.type = ImageTypeOther;
m_imageInfoRecord.exifDataValid = false;
m_imageInfoRecord.xres = qMax(72, qRound(xres));
m_imageInfoRecord.yres = qMax(72, qRound(yres));
m_imageInfoRecord.BBoxX = 0;
258,4 → 377,3
m_embeddedProfile.resize(length);
memcpy(dest, src, length);
}
 
/trunk/Scribus/scribus/scimgdataloader_gmagick.h
15,6 → 15,7
protected:
void initSupportedFormatList();
bool m_useRawImage;
int layerCount;
private:
static bool gm_initialized;
bool readCMYK(Image *input, RawImage *output, int width, int height);