L'exigence de mon projet est que je puisse créer une image avec une largeur allant jusqu'à 36000 pixels (hauteur beaucoup plus petite). (L'image est rendue à partir d'un QGraphicsScene
).Puis-je ajouter un QImage à un autre sans utiliser de peinture tramée?
Je suis tombé sur une limitation: QPainter
limite la taille de l'appareil pour la peinture de trame:
void QRasterPaintEnginePrivate::systemStateChanged()
{
deviceRectUnclipped = QRect(0, 0,
qMin(QT_RASTER_COORD_LIMIT, device->width()),
qMin(QT_RASTER_COORD_LIMIT, device->height()));
....
}
// This limitations comes from qgrayraster.c. Any higher and
// rasterization of shapes will produce incorrect results.
const int QT_RASTER_COORD_LIMIT = 32767;
(Ma tentative pour résoudre ... Rendering a large QGraphicsScene on a QImage clips it off)
Alors ... Je pensais, puis-je créer 2 images puis les ajouter? (Un à la fin de l'autre)
if(wOutput > 32767)
{
QImage image1 = QImage(32767, hOutput, QImage::Format_Mono);
image1.fill(QColor(Qt::white).rgb());
QRectF source(0, 0, 32767, hOutput);
QRectF target(0, 0, 32767, hOutput);
QPainter painter;
painter.begin(&image1);
outputScene->render(&painter, target, source);
painter.end();
QImage image2 = QImage(wOutput - 32767, hOutput, QImage::Format_Mono);
image2.fill(QColor(Qt::white).rgb());
source = QRectF(32767, 0, wOutput - 32767, hOutput);
target = QRectF(0, 0, wOutput - 32767, hOutput);
painter.begin(&image2);
outputScene->render(&painter, target, source);
painter.end();
// now create a combination, add image2 at the end of image1
QImage image = QImage(wOutput, hOutput, QImage::Format_Mono);
painter.begin(&image);
painter.drawImage(0, 0, image1);
painter.drawImage(32767, hOutput, image2);
painter.end();
}
else
{
// just create the image
}
Semble très logique ... mais la sortie ne montre pas image2
. Évidemment ... J'utilise la même peinture raster ... avec la même limitation!
De quel autre moyen puis-je ajouter une image à la fin d'une autre? (note - ma "grande" taille est une "largeur" donc je ne pense même pas que je peux utiliser scanline
pour copier les pixels plus rapidement)
Pourquoi ne voulez-vous pas utiliser scanline pour obtenir les données de pixels et le copier ? – Fabio
@Fabio - Je pourrais - mais comment – Thalia