2016-08-26 32 views
0

私はQGraphicsSceneを持っています。サイズは62450x4750です。私はいつかシーン全体のスクリーンショットを作成してファイルに保存する必要があります。Qt 4.8、大きなQGraphicsSceneのスクリーンショット

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ピクセルの幅でcuted取得するたびに:私はこのように試してみました。

答えて

2

the documentationによると、QPainterは+/- 32768より大きい座標をサポートしていません。このdoes not appear to be fixedもQt 5になります。

おそらく、シーンを複数のパスでレンダリングすることで解決できます。翻訳とクリッピングによって。シーンを最大32768x32768ピクセルの複数のブロックでレンダリングし、最終画像の適切な位置に配置することができます。

+0

これは適切な方法です。 –

関連する問題