Qt 4.8,大型Qgraphicscene的屏幕截图
我有QG,尺寸是62450x4750。有时我需要制作整个场景的截图并保存到文件中。我试着这样做: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
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