2012-01-09 12 views
8

Sto sviluppando un programma che deve calcolare un colore di ciascun punto su un'immagine 1024x1024 utilizzando un algoritmo speciale. Il colore di un punto rappresenta un valore. Quindi ogni punto è indipendente da altri punti e deve essere disegnato separatamente. Non devo aggiornare l'immagine troppo frequentemente. In realtà, ho bisogno di visualizzarlo solo una volta.Qt. Il modo più veloce per disegnare 1024x1024 punti sullo schermo

Qual è l'approccio più veloce per disegnare pixel separati in Qt?

Posso ottenere una sorta di "memoria dello schermo" e scrivere tutta l'immagine come una matrice di set di 4 byte, che rappresenta ogni pixel come 4 byte in quella memoria?

risposta

7

La classe QImage è ottimizzata per la manipolazione dei pixel. È possibile creare un'istanza con la dimensione richiesta e quindi impostare i pixel singolarmente setPixel oppure accedere ai dati non elaborati e manipolarli in posizione tramite bits(). Assicurati di utilizzare il formato corretto (ad es. Valori RGBA o indici di colore per immagini a 8 bit)

6

La soluzione più veloce potrebbe essere quella di creare un QImage, manipolarlo (impostare i pixel) e quindi ottenere Qt per disegnarlo.

La classe QImage è per veloce IO, dal manuale:

La classe QImage fornisce una rappresentazione immagine indipendente dall'hardware che consente l'accesso diretto ai dati di pixel, e può essere utilizzato come dispositivo di vernice.

La classe QImage supporta diversi formati di immagine descritti da Format enum. Questi includono immagini monocromatiche, a 8 bit, a 32 bit e alpha-blended, disponibili in tutte le versioni di Qt 4.x.

Sono disponibili informazioni sulla manipolazione dei pixel nella sezione Descrizione dettagliata.

Per visualizzarlo il modo più semplice sarebbe convertirlo in una pixmap con QPixmap::fromImage e quindi inserirlo in un'etichetta con QLabel::setPixmap.

Per un maggiore controllo, si potrebbe sottoclasse QWidget, sovraccaricare il paintEvent, e disegnare la QImage con un QPainter con QPainter::drawImage.

+0

Ridipingere la QImage in ogni evento di disegno può essere piuttosto costoso a seconda della piattaforma, quindi è meglio convertirlo in QPixmap prima di dipingere e cache quella pixmap. –

+0

Frank, grazie! – pavelkolodin

+1

Wow, QImage mi ha permesso di disegnare la mia immagine quasi istantaneamente, ho un FPS di grandi dimensioni (-; – pavelkolodin

Problemi correlati