Мое требование к проекту состоит в том, что я могу создать изображение шириной до 36000 пикселей (высота намного меньше).
(Изображение отображается с QGraphicsScene
).Можно ли добавить один QImage к другому без использования растровой графики?
я столкнулся с ограничением: QPainter
ограничивает его размер устройства для растровой живописи:
void QRasterPaintEnginePrivate::systemStateChanged()
{
deviceRectUnclipped = QRect(0, 0,
qMin(QT_RASTER_COORD_LIMIT, device->width()),
qMin(QT_RASTER_COORD_LIMIT, device->height()));
....
}
// This limitations comes from qgrayraster.c. Any higher and
// rasterization of shapes will produce incorrect results.
const int QT_RASTER_COORD_LIMIT = 32767;
(Моя попытка устранить ... Rendering a large QGraphicsScene on a QImage clips it off)
Итак ... Я думал, я могу создать 2 изображения затем добавить их? (Один в конце друг друга)
if(wOutput > 32767)
{
QImage image1 = QImage(32767, hOutput, QImage::Format_Mono);
image1.fill(QColor(Qt::white).rgb());
QRectF source(0, 0, 32767, hOutput);
QRectF target(0, 0, 32767, hOutput);
QPainter painter;
painter.begin(&image1);
outputScene->render(&painter, target, source);
painter.end();
QImage image2 = QImage(wOutput - 32767, hOutput, QImage::Format_Mono);
image2.fill(QColor(Qt::white).rgb());
source = QRectF(32767, 0, wOutput - 32767, hOutput);
target = QRectF(0, 0, wOutput - 32767, hOutput);
painter.begin(&image2);
outputScene->render(&painter, target, source);
painter.end();
// now create a combination, add image2 at the end of image1
QImage image = QImage(wOutput, hOutput, QImage::Format_Mono);
painter.begin(&image);
painter.drawImage(0, 0, image1);
painter.drawImage(32767, hOutput, image2);
painter.end();
}
else
{
// just create the image
}
выглядит очень логично ... но выход не показывает image2
. Очевидно ... Я использую ту же растровую картину ... с тем же ограничением!
Каким другим способом можно добавить изображение в конце другого? (примечание - мой «большой» размер - это «ширина», поэтому я даже не думаю, что могу использовать scanline
для копирования пикселей быстрее)
Почему вы не хотите использовать ScanLine, чтобы получить пиксельные данные и скопировать его ? – Fabio
@Fabio - я мог бы, но как – Thalia