Fast Bitmap Update



  • I have a QGraphicsView with a QGraphicsScene. I use this mostly to display a 16-bit grayscale image but it can also have some other items on it, e.g. circles, lines, text, etc. hence I chose the QGraphicsScene. The user will frequently adjust the brightness and contrast of the image using the mouse. To have this happening smoothly, I need to achieve about 10 updates per second. However, I am only getting about 2 or 3. Here is what I do:

    Initially:
    pImage = new QImage(...)
    pScene = new QGraphicsScene()
    pixmap = QPixmap::fromImage(*image)
    pPixmap = pScene->addPixmap(pixmap)

    Updates:
    for all rows:
    memcpy(pImage->scanLine(y), newData, width)
    newPixmap = QPixmap::fromImage(*pImage)
    pPixmap->setPixmap(pm)

    Especially the fromImage takes a lot of time. How can I achieve the same but much faster? I would also be willing to give up the QGraphicsScene (which is the reason why I need to use QPixmaps rather the QImage) as long as I can still easily draw the circles, lines and text.


  • Moderators

    Hi! The way to make this really fast is to use OpenGL. You upload the grayscale data to the GPU, and run a shader program on it to change the brightness / constrast.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.