Qt 4.8,大型Qgraphicscene的屏幕截图

Qt 4.8,大型Qgraphicscene的屏幕截图,qt,qgraphicsscene,qpainter,qimage,qpixmap,Qt,Qgraphicsscene,Qpainter,Qimage,Qpixmap,我有QG,尺寸是62450x4750。有时我需要制作整个场景的截图并保存到文件中。我试着这样做: QPixmap wholeScene(scene.sceneRect().size().toSize()); { QPainter wholeScenePainter(&wholeScene); scene.render(&wholeScenePainter); } // saving pixmap 或 QPixmap(scene.scene().size().to

我有QG,尺寸是62450x4750。有时我需要制作整个场景的截图并保存到文件中。我试着这样做:

QPixmap wholeScene(scene.sceneRect().size().toSize());
{
    QPainter wholeScenePainter(&wholeScene);
    scene.render(&wholeScenePainter);
}
// saving pixmap

QPixmap(scene.scene().size().toSize());
{
QPainter批发商(和批发商);
int x=0;
整数部分=32768;//
而(x部分?部分:scene.scen直立().width()-x;
QRect rect(x,0,宽度,scene.scene直立().height());
场景渲染(&wholeScenePainter,rect,rect);
x+=宽度;
}
}
//保存pixmap

QPixmap(scene.scene().size().toSize());
{
QPainter批发商(和批发商);
int x=0;
整数部分=4096;
而(x部分?部分:scene.scen直立().width()-x;
QRect rect(x,0,宽度,scene.scene直立().height());
QPixmap temp(rect.size());
Q油漆工p和温度;
渲染(&p,QRect(0,0,rect.width(),rect.height()),rect);
批发商发票(x,0,温度);
//临时保存(QString(“print%1.png”).arg(QString::number(x)),“png”);
x+=宽度;
}
}
//保存pixmap
但每次我在32768像素上按宽度剪切图像(Pixmap)。

根据,QPaint不支持大于+/-32768的坐标。这在qt5中也是如此

也许可以通过在多个过程中渲染场景(例如通过平移和剪裁)来解决此问题。您可以以最大32768x32768像素的多个块渲染场景,并将它们放置在最终图像中的正确位置。

根据,QPaint不支持大于+/-32768的坐标。这在qt5中也是如此


也许可以通过在多个过程中渲染场景(例如通过平移和剪裁)来解决此问题。您可以在多个最大32768x32768像素的块中渲染场景,并将它们放置在最终图像中的正确位置。

这是正确的方法。这是正确的方法。
QPixmap wholeScene(scene.sceneRect().size().toSize());
{
    QPainter wholeScenePainter(&wholeScene);
    int x = 0;
    int portion = 32768; // 
    while( x < scene.sceneRect().width()) {
        int width = scene.sceneRect().width() - x > portion ? portion : scene.sceneRect().width() - x;
        QRect rect(x, 0, width, scene.sceneRect().height());
        scene.render(&wholeScenePainter, rect, rect);

        x += width;
    }
}
// saving pixmap
QPixmap wholeScene(scene.sceneRect().size().toSize());
{
    QPainter wholeScenePainter(&wholeScene);
    int x = 0;
    int portion = 4096;
    while( x < scene.sceneRect().width()) {
        int width = scene.sceneRect().width() - x > portion ? portion : scene.sceneRect().width() - x;
        QRect rect(x, 0, width, scene.sceneRect().height());

        QPixmap temp(rect.size());
        QPainter p(&temp);
        scene.render(&p, QRect(0, 0, rect.width(), rect.height()), rect);
        wholeScenePainter.drawPixmap(x,0, temp);
        //temp.save(QString("print%1.png").arg(QString::number(x)), "PNG");

        x += width;
    }
}
// saving pixmap