Non capisco quale sia la differenza tra QImage e QPixmap, sembrano offrire la stessa funzionalità. Quando dovrei usare una QImage e quando dovrei usare una QPixmap?
Non capisco quale sia la differenza tra QImage e QPixmap, sembrano offrire la stessa funzionalità. Quando dovrei usare una QImage e quando dovrei usare una QPixmap?
Risposte:
Risposte facilmente leggendo i documenti su QImage e QPixmap :
La classe QPixmap è una rappresentazione dell'immagine fuori schermo che può essere utilizzata come dispositivo di disegno.
La classe QImage fornisce una rappresentazione dell'immagine indipendente dall'hardware che consente l'accesso diretto ai dati dei pixel e può essere utilizzata come dispositivo di disegno.
Modifica: inoltre, dalla risposta di @ Dave:
Non puoi manipolare una QPixmap al di fuori del thread della GUI, ma QImage non ha tale restrizione.
E da @Arnold:
Ecco un breve riassunto che di solito (non sempre) si applica:
- Se prevedi di manipolare un'immagine, modificarla, cambiare i pixel su di essa, ecc., Usa una QImage.
- Se prevedi di disegnare la stessa immagine più di una volta sullo schermo, convertila in una QPixmap.
C'è una bella serie di articoli su Qt Labs che spiega molto sul sistema grafico Qt. In questo articolo , in particolare, ha una sezione sulla QImage
vs. QPixmap
.
Ecco un breve riassunto che di solito (non sempre) si applica:
QImage
.QPixmap
.Una differenza importante è che non è possibile creare o manipolare un QPixmap
su nient'altro che il thread principale della GUI. È tuttavia possibile creare e manipolare QImage
istanze sui thread in background e quindi convertirle dopo averle restituite al thread della GUI.
Importante negli ambienti industriali:
La QPixmap viene memorizzata sulla scheda video durante la visualizzazione. Non il QImage.
Quindi, se hai un server che esegue l'applicazione e una stazione client che esegue la visualizzazione, è molto significativo in termini di utilizzo della rete.
Con una Pixmap, un Redraw consiste nell'inviare solo l'ordine di redraw (pochi byte) sulla rete.
Con una QImage, consiste nell'inviare l'intera immagine (circa pochi MB).
QPixmap
è un "oggetto immagine" la cui pixel
rappresentazione non ha alcuna conseguenza nel codice, quindi QPixmap è progettato e ottimizzato per il rendering di immagini sullo schermo, viene memorizzato su XServer quando si utilizza X11, quindi disegnare QPixmap su XWindow è molto più veloce del disegno QImages, poiché i dati sono già sul server e pronti per l'uso.
Quando usare QPixmap : Se vuoi solo disegnare un'immagine esistente (icona .. sfondo .. ecc.) Specialmente ripetutamente, allora usa QPixmap.
QImage è un "array di pixel in memoria" del codice client , QImage è progettato e ottimizzato per I / O e per l'accesso e la manipolazione diretti ai pixel.
Quando usare QImage : se vuoi disegnare, con Qpaint, o manipolare i pixel di un'immagine.
QBitmap è solo una comoda sottoclasse QPixmap che garantisce una profondità di 1, è una pixmap monocromatica (profondità di 1 bit). Proprio come QPixmap, QBitmap è ottimizzato per l'uso della condivisione implicita dei dati.