mirror of
https://invent.kde.org/frameworks/kimageformats.git
synced 2026-06-18 05:29:11 -04:00
Unified maximum pixel value for large image plugins
This commit is contained in:
@@ -26,12 +26,16 @@
|
||||
#define USE_FLOAT_IMAGES // default uncommented
|
||||
|
||||
// Let's set a "reasonable" maximum size
|
||||
#define MAX_IMAGE_WIDTH 300000
|
||||
#define MAX_IMAGE_HEIGHT 300000
|
||||
#ifndef XCF_MAX_IMAGE_WIDTH
|
||||
#define XCF_MAX_IMAGE_WIDTH KIF_LARGE_IMAGE_PIXEL_LIMIT
|
||||
#endif
|
||||
#ifndef XCF_MAX_IMAGE_HEIGHT
|
||||
#define XCF_MAX_IMAGE_HEIGHT XCF_MAX_IMAGE_WIDTH
|
||||
#endif
|
||||
#else
|
||||
// While it is possible to have images larger than 32767 pixels, QPainter seems unable to go beyond this threshold using Qt 5.
|
||||
#define MAX_IMAGE_WIDTH 32767
|
||||
#define MAX_IMAGE_HEIGHT 32767
|
||||
#define XCF_MAX_IMAGE_WIDTH 32767
|
||||
#define XCF_MAX_IMAGE_HEIGHT 32767
|
||||
#endif
|
||||
|
||||
#ifdef USE_FLOAT_IMAGES
|
||||
@@ -844,8 +848,8 @@ bool XCFImageFormat::readXCFHeader(QDataStream &xcf_io, XCFImage::Header *header
|
||||
return false;
|
||||
}
|
||||
|
||||
if (header->width > MAX_IMAGE_WIDTH || header->height > MAX_IMAGE_HEIGHT) {
|
||||
qCWarning(XCFPLUGIN) << "The maximum image size is limited to" << MAX_IMAGE_WIDTH << "x" << MAX_IMAGE_HEIGHT << "px";
|
||||
if (header->width > XCF_MAX_IMAGE_WIDTH || header->height > XCF_MAX_IMAGE_HEIGHT) {
|
||||
qCWarning(XCFPLUGIN) << "The maximum image size is limited to" << XCF_MAX_IMAGE_WIDTH << "x" << XCF_MAX_IMAGE_HEIGHT << "px";
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1364,8 +1368,8 @@ bool XCFImageFormat::composeTiles(XCFImage &xcf_image)
|
||||
qCWarning(XCFPLUGIN) << "On 32-bits programs the maximum layer size is limited to" << 16384 << "x" << 16384 << "px";
|
||||
return false;
|
||||
}
|
||||
if (layer.width > MAX_IMAGE_WIDTH || layer.height > MAX_IMAGE_HEIGHT) {
|
||||
qCWarning(XCFPLUGIN) << "The maximum layer size is limited to" << MAX_IMAGE_WIDTH << "x" << MAX_IMAGE_HEIGHT << "px";
|
||||
if (layer.width > XCF_MAX_IMAGE_WIDTH || layer.height > XCF_MAX_IMAGE_HEIGHT) {
|
||||
qCWarning(XCFPLUGIN) << "The maximum layer size is limited to" << XCF_MAX_IMAGE_WIDTH << "x" << XCF_MAX_IMAGE_HEIGHT << "px";
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2793,8 +2797,7 @@ void XCFImageFormat::copyLayerToImage(XCFImage &xcf_image)
|
||||
QPainter painter(&image);
|
||||
painter.setOpacity(layer.opacity / 255.0);
|
||||
painter.setCompositionMode(QPainter::CompositionMode_Source);
|
||||
if (x + layer.x_offset < MAX_IMAGE_WIDTH &&
|
||||
y + layer.y_offset < MAX_IMAGE_HEIGHT) {
|
||||
if (x + layer.x_offset < XCF_MAX_IMAGE_WIDTH && y + layer.y_offset < XCF_MAX_IMAGE_HEIGHT) {
|
||||
painter.drawImage(x + layer.x_offset, y + layer.y_offset, layer.image_tiles[j][i]);
|
||||
}
|
||||
continue;
|
||||
@@ -3196,8 +3199,7 @@ void XCFImageFormat::mergeLayerIntoImage(XCFImage &xcf_image)
|
||||
qint32 x = qint32(i * TILE_WIDTH);
|
||||
|
||||
QImage &tile = layer.image_tiles[j][i];
|
||||
if (x + layer.x_offset < MAX_IMAGE_WIDTH &&
|
||||
y + layer.y_offset < MAX_IMAGE_HEIGHT) {
|
||||
if (x + layer.x_offset < XCF_MAX_IMAGE_WIDTH && y + layer.y_offset < XCF_MAX_IMAGE_HEIGHT) {
|
||||
painter.drawImage(x + layer.x_offset, y + layer.y_offset, tile);
|
||||
}
|
||||
}
|
||||
@@ -3248,8 +3250,7 @@ void XCFImageFormat::mergeLayerIntoImage(XCFImage &xcf_image)
|
||||
QPainter painter(&image);
|
||||
painter.setOpacity(layer.opacity / 255.0);
|
||||
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
|
||||
if (x + layer.x_offset < MAX_IMAGE_WIDTH &&
|
||||
y + layer.y_offset < MAX_IMAGE_HEIGHT) {
|
||||
if (x + layer.x_offset < XCF_MAX_IMAGE_WIDTH && y + layer.y_offset < XCF_MAX_IMAGE_HEIGHT) {
|
||||
painter.drawImage(x + layer.x_offset, y + layer.y_offset, layer.image_tiles[j][i]);
|
||||
}
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user