> On 19 Oct 2015, at 13:00, Gunnar Sletta <gun...@sletta.org> wrote: > > >> On 17 Oct 2015, at 17:28, Celal SAVUR <c.sa...@gmail.com> wrote: >> >> Hello everyone, >> >> I have some performance issue when I am using QPixmap. >> >> I am getting image from buffer and I create QImage. After that using >> QPixmap::fromImage(), creating pixmap and set it to QGraphicPixmapItem to >> be drawn in scene. >> >> When I put the timer to see how much time Qt spending to create QPixmap, I >> realize that I converting from Qimage to QPixmap taking ~20 times more time >> than crating Qimage from buffer. > > If you are using the QImage(uchar *data, int width, int height, ..) overload, > this is surprising as creating the image from raw pixel data only has to > allocate the QImage d-pointer and otherwise use the data as is. > > Converting that to a QPixmap will entail a QImage::convertToFormat() to map > the image into a system specific pixel format, usually QImage::RGB32 or > QImage::ARGB32_Premultiplied, but any given QPA backend may override that > with an other format if that is more compatible with its raster backingstore. > >> By the way, I am getting image approximately every 200 ms some times faster >> than that. >> >> Do you have any suggestion to increase the performance? >> Can I draw QImage into scene without Qpixmap convertion? How ? > > There are a couple of options. > > If you can provide the pixel data in a format compatible with the > backingstore, the conversion can be simpler or just a no-op. > > You can also draw the image directly using QPainter::drawImage(). If you > didn't set the QGraphicsView viewport to be an OpenGL enabled viewport, then > the image will be converted to the right format on the fly. The actual > drawing will then be a bit slower, but as you avoid the conversion, it should > be a net win. > > You can do that by implementing your own QGraphicsItem and draw the image in > the virtual paint() function.
Bah.. Completely forgot about the Qt::NoImageConversion flag that Allan mentioned. That saves you going through QPainter::drawImage() and a bit of implementation work :) > > If you have a GL viewport, then the image needs to be uploaded to a GL > texture. QPainter will do this and put the image into some GL_RGB or GL_RGBA > data and might perform additional conversion before that, but drawing the > image using QPainter::drawImage might still result in less conversion. > > Of course, if you have a GL viewport and some non-standard format, you can > potentially speed it up further by implementing a QGraphicsItem which does > raw GL, encapsulated by QPainter::beginNativePainting()/endNativePainting() > and then upload to a texture of your choosing and then draw the texture with > GL commands. > > cheers, > Gunnar > >> >> >> >> Thank you. >> >> Celal >> >> _______________________________________________ >> Interest mailing list >> Interest@qt-project.org >> http://lists.qt-project.org/mailman/listinfo/interest > > _______________________________________________ > Interest mailing list > Interest@qt-project.org > http://lists.qt-project.org/mailman/listinfo/interest _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest