You are not logged in.

1

Monday, October 4th 2010, 10:25am

Problem drawing QImage on a big target rect.

Hello all,

I am having problem with painting a scaled QImage on QGraphicsView. Below is the re-implemented drawBackground() function, with few profiling logs.
According to profiling logs, the bottleneck is painting 512x512 QImage on a target rectangle of size 836x836.

Any suggestion on improving this, would be greatly appreciated.

void drawBackground(QPainter *painter, const QRectF &rect)
{
qDebug() << "-----------------------------------------------------";
rad_timer timer;
timer.start();

QGraphicsView::drawBackground(painter, rect);
timer timer1;
timer1.start();
painter->save();
timer1.end();
qDebug() << "Painter save took:" << timer1.getIntervalMilliseconds();

timer1.start();
painter->setTransform(tx);
timer1.end();
qDebug() << "Setting transformation took:" << timer1.getIntervalMilliseconds();

timer1.start();
QSizeF imageSize = qImage.size();
imageSize.scale(rect.adjusted(10,10,-10,-10).size(), Qt::KeepAspectRatio);
QRectF imageRect(QPointF(0,0), imageSize);
imageRect.moveCenter(rect.center());
timer1.end();
qDebug() << "Resizing and translating took:" << timer1.getIntervalMilliseconds();

timer1.start();
qDebug() << "image size:"<<qImage.size();
qDebug() << "target rect size:"<<imageRect.size();
painter->drawImage(imageRect, qImage, QRectF());
timer1.end();
qDebug() << "drawing image took:" << timer1.getIntervalMilliseconds();
timer.end();
qDebug() << "Painting took:"<<timer.getIntervalMilliseconds() << "ms";
qDebug() << "-----------------------------------------------------";

}



DEBUG LOGS :

-----------------------------------------------------
Painter save took: 0
Setting transformation took: 0
Resizing and translating took: 0
image size: QSize(512, 512)
target rect size: QSizeF(836.019, 836.019)
drawing image took: 203
Painting took: 203 ms
-----------------------------------------------------
-----------------------------------------------------
Painter save took: 0
Setting transformation took: 0
Resizing and translating took: 0
image size: QSize(512, 512)
target rect size: QSizeF(836.019, 836.019)
drawing image took: 187
Painting took: 203 ms
-----------------------------------------------------