Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QImage and QPixmap
Qt 6.11 is out! See what's new in the release blog

QImage and QPixmap

Scheduled Pinned Locked Moved General and Desktop
1 Posts 1 Posters 8.4k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ? Offline
    ? Offline
    A Former User
    wrote on last edited by
    #1

    Hi all,
    I learnt the difference between the QImage and QPixmap as
    The QPixmap class is an off-screen image representation that can be used as a paint device.

    The QImage class provides a hardware-independent image representation that allows direct access to the pixel data, and can be used as a paint device.

    I have QImage and want to display in QGraphicsView in a fast way.
    The other person has shown displaying images 800 updates/sec (I assume it is 800 frames/sec) using QPixmap; as shown in the example below.
    The link is
    http://www.qtcentre.org/threads/6929-Any-fast-way(-lt-10ms)-to-display-640*480-QImage-on-QGraphicsScene

    My query is I have QImage and to get his performance,
    (1) do I need to change QImage to QPixma?
    (2)If not necessary, he used QGraphicsPixmapItem* pixmapItem; to update to scene->addItem(pixmapItem);
    for my QImage, just add QImage to the scene?

    The sample program is
    main.h
    @
    #ifndef MAIN_H
    #define MAIN_H

    #include <QtGui>
    //#include <QtOpenGL>

    class ImageSource : QObject
    { Q_OBJECT
    public:
    ImageSource(QString text = "Hello!",int w = 640,int h = 480) : m_width(w),m_height(h)
    {
    if (text.length() == 0) text = "Hello!";
    // Create pixmaps for each character
    for (int i=0;i<text.length();++i)
    {
    QString imageText(text.length(),' ');
    imageText[i] = text.at(i);
    QPixmap* pm = new QPixmap(w,h);
    pm->fill(Qt::white);
    QPainter p(pm);
    p.setFont(QFont("Courier"));
    p.setPen(Qt::black);
    p.drawText(QRectF(0,0,w,h),Qt::AlignCenter,imageText);
    dummies.append(pm);
    }
    current = dummies.length();
    }
    QPixmap* nextImage()
    {
    --current;
    if (current < 0)
    current = dummies.length()-1;
    //return dummies.at(3);
    return dummies.at(current);
    }
    int width() {return m_width;}
    int height() {return m_height;}
    private:
    QList<QPixmap* > dummies;
    int current;
    int m_width;
    int m_height;
    };

    class MainWindow : public QMainWindow
    { Q_OBJECT
    public:
    MainWindow()
    {
    scene = new QGraphicsScene(this);

        imageSrc = new ImageSource();
    
        pixmapItem = new QGraphicsPixmapItem();
        scene->addItem(pixmapItem);
    
        view = new QGraphicsView();
        //view->setViewport(new QGLWidget(QGLFormat()));
        view->setScene(scene);
    
        setCentralWidget(view);
    
        QTimer* updateTimer = new QTimer(this);
        QObject::connect(updateTimer,SIGNAL(timeout()),this,SLOT(doUpdate()));
        updateTimer->start(1);
    
        QTimer* fpsTimer = new QTimer(this);
        QObject::connect(fpsTimer,SIGNAL(timeout()),this,SLOT(showFPS()));
        fpsTimer->start(1000);
    }
    ~MainWindow() {}
    

    protected slots:
    void doUpdate()
    {
    pixmapItem->setPixmap(*imageSrc->nextImage());
    ++frameCounter;
    }
    void showFPS()
    {
    setWindowTitle(QString("FPS: %1").arg(frameCounter));
    frameCounter = 0;
    }

    private:
    QGraphicsScene* scene;
    QGraphicsView* view;
    ImageSource* imageSrc;
    QGraphicsPixmapItem* pixmapItem;
    int frameCounter;
    };

    #endif // MAIN_H
    @

    main.cpp:
    @
    #include <QtCore>
    #include <QtGui>

    #include "main.h"

    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);

    MainWindow mw;
    mw.show();
    
    return a.exec(&#41;;
    

    }
    @
    pro-file:
    @
    //QT += opengl
    TARGET = FastImages
    TEMPLATE = app
    SOURCES += main.cpp
    HEADERS +=
    main.h
    @

    [Edit: Please be sure to wrap code in @ tags for formatting -- mlong]

    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved