2010-03-12 16 views
18

Tengo problemas para leer y escribir datos de QByteArray en un archivo.Cómo guardar un Objeto QPixmap en un archivo?

Mi objetivo es guardar los datos de QPixmap en un QByteArray y guardar ese QByteArray en un archivo (con la capacidad de volver a leer este QByteArray del archivo en un QPixmap). Quiero usar siguiente código de la documentación 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 

Después de escribir el buffer en un archivo, quiero ser capaz de recuperar el QByteArray y cargarlo de nuevo en un QPixmap utilizando el QPixmap :: loadFromData() función.

Háganme saber si es necesario hacer más aclaraciones (también estoy abierto a enfoques alternativos, ¡solo necesito poder leer y escribir el QPixmap en un archivo! :));

Respuesta

34

Eso parecía un muy largo camino por recorrer en hacerlo (pero su comentario explica mejor):

para la escritura:

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

Para la lectura:

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

QBuffer es genial cuando necesita un QIODevice y desea guardarlo en la memoria, pero si realmente va a salir al disco, entonces es un paso intermedio innecesario.

EDIT:

Para escribir mapas de píxeles, y otras cosas, a un solo archivo que lo recomiendo que utilice QDataStream.

para la escritura:

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

A continuación, se puede hacer lo mismo para la lectura:

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

Tendrá que asegurarse de que se lee en los mismos objetos a medida que los escribió a cabo. Para ahorrarse futuros dolores de cabeza de compatibilidad, configure la versión de QDataStream explícitamente.

+0

Esta solución es genial, pero necesito poder guardar varios datos de imagen junto con el texto en un único archivo. Por ejemplo, mi archivo contendría imagen 1 título, imagen 1 info ... etc imagen 2 del título, imagen 2 info ... etc ¿Alguna sugerencia? –

+0

Publicación editada para hacer referencia a QDataStream. –

Cuestiones relacionadas