Non capisco qual è la differenza tra QImage e QPixmap, sembrano offrire la stessa funzionalità. Quando dovrei usare QImage e quando dovrei usare QPixmap?Qual è la differenza tra QImage e QPixmap?
risposta
Easilly risposto leggendo la documentazione sulla QImage e QPixmap:
La classe QPixmap è una rappresentazione di immagini off-screen che può essere utilizzato come dispositivo di vernice.
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.
Edit: Inoltre, da @ risposta di Dave:
non si può manipolare una QPixmap al di fuori della GUI-thread, ma QImage non ha tale restrizione.
E da @Arnold:
Ecco un breve riassunto che di solito (non sempre) si applica:
- Se avete intenzione di manipolare un'immagine, modificarla, cambiare pixel su di esso , ecc., Utilizzare un QImage.
- Se si pianifica di disegnare la stessa immagine più di una volta sullo schermo, convertirla in una QPixmap.
grazie per il tuo aiuto ... qual è il processo generale che QPixmpa e QImage caricano un'immagine ... cosa c'è nella memoria .. grazie .. –
Non sono sicuro di cosa stai provando a fare, ma in [questa domanda ] (http://stackoverflow.com/questions/9011108/image-scaling-keepaspectratiobyexpanding-through-opengl) Dimostro come caricare i dati YV12 dal disco, convertire in RGB usando uno shader di frammenti GLSL e quindi visualizzarli sul schermo all'interno di una QImage.Immagino di poterti indirizzare alla giusta direzione se fossi più chiaro su quello che stai cercando di ottenere. – karlphillip
Grazie per la risposta. –
C'è una bella serie di articoli in Qt Labs che spiega molto sul sistema grafico Qt. This article in particolare ha una sezione su QImage
rispetto a QPixmap
.
Ecco un breve riassunto che di solito (non sempre) si applica:
- Se avete intenzione di manipolare un'immagine, modificarla, cambiare pixel su di esso, ecc, utilizzare un
QImage
. - Se si intende disegnare la stessa immagine più volte sullo schermo, convertirla in
QPixmap
.
grazie. Questo passaggio ci dice: ci sono due modi diversi per caricare un'immagine, raster e OpenGL? è giusto? –
Non capisco bene la domanda. Né "raster" né "OpenGL" rappresentano in modo specifico i modi per caricare un'immagine. –
Una differenza importante è che non è possibile creare o manipolare uno QPixmap
su alcunché tranne il thread della GUI principale. È tuttavia possibile creare e manipolare istanze QImage
su thread in background e quindi convertirli dopo averli nuovamente passati al thread della GUI.
Importante in ambiente industriale:
Il QPixmap viene memorizzata sulla scheda video facendo il display. Non il QImage.
Quindi, se si dispone di un server che esegue l'applicazione e di una stazione client che esegue il display, è molto significativo in termini di utilizzo della rete.
Con una Pixmap, un Redraw consiste nell'inviare sulla rete solo l'ordine di ridisegno (alcuni ottetti). Esso consiste nell'inviare l'intera immagine con un QImage (pochi Mo? ...)
- QPixmap è un "oggetto immagine" i cui
pixel
rappresentazione sono di alcuna conseguenza nel codice, Così QPixmap è progettato e ottimizzato per il rendering delle immagini su schermo, viene memorizzato su XServer quando si utilizza X11, disegnando QPixmap su XWindow è molto più veloce rispetto al disegno di QImages, poiché i dati sono già presenti sul server e pronti per l'uso.
Quando usare QPixmap: Se si desidera solo per disegnare un'immagine esistente (icona .. sfondo .. etc) in particolare più volte, quindi utilizzare QPixmap.
- QImage è una "matrice di pixel nella memoria" del codice client, QImage è progettato e ottimizzato per l'I/O, e per l'accesso diretto pixel e la manipolazione.
Quando usare QImage: Se si vuole disegnare, con Qpaint, o manipolare un immagine pixel.
- QBitmap è solo una comoda QPixmap sottoclasse assicurare una profondità di 1, la sua monocromatica (profondità 1 bit) pixmap. Proprio come QPixmap, QBitmap è ottimizzato per l'uso della condivisione di dati implicita.
- QPicture è un dispositivo di vernice che registra e replay QPainter Comandi - il disegno -
non sono sicuro se ho capito la tua domanda, ma ho pensato che fosse abbastanza chiaro nella documentazione: " QImage è progettato e ottimizzato per I/O, e per l'accesso diretto ai pixel e la manipolazione, mentre QPixmap è progettato e ottimizzato per mostrare le immagini sullo schermo. " http://doc.qt.nokia.com/latest/qpixmap.html#details – cgmb
sì! l'ho trovato, ma non lo capisco bene, ad esempio, ottimizzato per I/O e ottimizzato per la visualizzazione, è la differenza che un picutre mostra sulla piattaforma di differenza? .. Puoi aiutarmi a fare un passo per spiegare .. grazie .. –
Non sono ancora sicuro al 100% So cosa intendi, ma se stai usando QWidgets, puoi visualizzarlo in una QLabel. Se si utilizza QGraphicsView, è possibile visualizzarlo in un QGraphicsPixmapItem. Se stai usando QML, l'elemento Image gestirà tutto per te. – cgmb