2

QPainter を使用してアイテムを QImage に描画しようとしていますが、この QImage の正確なサイズを予測できないため、 QImage::save() を使用できません。常に教えてくれます:

QPainter::begin: Paint device returned engine == 0, type: 3

しかし、この QImage を宣言するときに画像の高さと幅を指定すると、スムーズに動作します。

QImage output = QImage (500 , 500 , QImage::Format_ARGB32);

4

2 に答える 2

2

QImageQPixmapなどでは、描画を開始する前にデータを割り当てる必要があります。のデフォルトコンストラクタを使用してQImageもメモリは割り当てられないため、image.isNull() == true。したがって、QPainter::begin()(おそらくQImageペイントデバイスとしてを使用して間接的に作成することによって)呼び出すと、メモリがないため、メモリに描画できません。

QPainter::begin()ドキュメントから:

QPixmap image(0, 0);
painter->begin(&image); // impossible - image.isNull() == true;

したがって、描画する前にサイズを考え出す必要があります。あなたの状況では、最大サイズを決定する(または可能であれば計算する)のが最善の方法です。正確なサイズがわかったら、画像をトリミングします。

于 2012-06-07T11:14:01.027 に答える
0

QGraphicsSceneまたは、アイテムを追加すると自動的に拡張される に描画し、で指定された塗りつぶされた領域のみを保存できQGraphicsScene::itemsBoundingRect()ます。

QGraphicsScene scene;
scene.addItem(...);

QImage image(scene.itemsBoundingRect().size(), QImage::Format_ARGB32);

QPainter painter(&image);
scene.render(&painter, image.rect(), scene.itemsBoundingRect());
于 2012-06-07T13:30:23.517 に答える