【问题标题】:Qt 4.8, Screenshot of large QGraphicsSceneQt 4.8,大型 QGraphicsScene 截图
【发布时间】:2016-08-26 12:06:56
【问题描述】:

我有 QGraphicsScene,大小为 62450x4750。有时我需要截取整个场景并将其保存到文件中。我试过这样:

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

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

但每次我将图像(像素图)的宽度切割为 32768 像素。

【问题讨论】:

    标签: qt qgraphicsscene qpainter qimage qpixmap


    【解决方案1】:

    根据the documentation,QPainter 不支持大于 +/- 32768 的坐标。这个does not appear to be fixed 在 Qt 5 中也是如此。

    也许您可以通过多次渲染场景来解决这个问题,例如通过翻译和剪辑。您可以在最大 32768x32768 像素的多个块中渲染场景,并将它们放置在最终图像中的适当位置。

    【讨论】:

    • 这是正确的做法。
    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多