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); |
} |
|