2010-03-12 17 views
18

Ho problemi a leggere e scrivere i dati QByteArray su un file.Come salvare un oggetto QPixmap in un file?

Il mio obiettivo è salvare i dati QPixmap in un QByteArray e salvare QByteArray in un file (con la possibilità di leggere questo QByteArray dal file e in una QPixmap). Voglio usare seguente codice dalla documentazione QPixmap:

 QPixmap pixmap(<image path>); 
    QByteArray bytes; 
    QBuffer buffer(&bytes); 
    buffer.open(QIODevice::WriteOnly); 
    pixmap.save(&buffer, "PNG"); // writes pixmap into bytes in PNG format 

Dopo aver scritto il buffer in un file, voglio essere in grado di recuperare il QByteArray e caricarlo di nuovo in un QPixmap utilizzando il QPixmap :: loadFromData() funzione.

Per favore fatemi sapere se sono necessari ulteriori chiarimenti (sono aperto anche ad approcci alternativi, ho solo bisogno di essere in grado di leggere e scrivere QPixmap in un file :) :);

risposta

34

che sembrava davvero un lungo cammino da fare per farlo (ma il tuo commento spiega meglio):

Per la scrittura:

QFile file("yourFile.png"); 
file.open(QIODevice::WriteOnly); 
pixmap.save(&file, "PNG"); 

Per la lettura:

QPixmap pixmap; 
pixmap.load("yourFile.png"); 

QBuffer è ottimo quando hai bisogno di un QIODevice e vuoi tenerlo in memoria, ma se stai uscendo sul disco, allora è un passaggio intermedio non necessario.

EDIT:

Per scrivere pixmaps, e le altre cose, in un singolo file mi consiglia di utilizzare QDataStream.

Per la scrittura:

QFile file("outfile.dat"); 
file.open(QIODevice::WriteOnly); 
QDataStream out(&file); 
out << QString("almost any qt value object") 
    << yourQPixMap << yourQList /* << etc. */; 

Poi, si può fare in modo simile per la lettura:

QFile file("infile.dat"); 
file.open(QIODevice::ReadOnly); 
QDataStream in(&file); 
in >> firstQString >> yourQPixmap >> yourList /* >> etc. */; 

Avrai bisogno di fare in modo di leggere negli stessi oggetti come li hai scritto fuori. Per risparmiare futuri mal di testa sulla compatibilità, impostare la versione QDataStream in modo esplicito.

+0

Questa soluzione è ottima, ma devo essere in grado di salvare più dati di immagine insieme al testo in un singolo file. Per esempio, il mio file conterrebbe foto 1 documenti, foto 1 info ... ecc immagine 2 documenti, foto 2 info ... ecc Qualche suggerimento? –

+0

Post modificato per fare riferimento a QDataStream. –

Problemi correlati