Pregunta

Estoy teniendo problemas para leer y escribir datos en un archivo QByteArray.

Mi objetivo es salvar los datos QPixmap en un QByteArray QByteArray y salvar lo que en un archivo (con la capacidad de leer este QByteArray desde el archivo y 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 usando la función QPixmap :: loadFromData ().

Por favor, hágamelo saber si se necesita cualquier aclaración adicional (estoy abierto a enfoques alternativos, así, sólo hay que ser capaz de leer y escribir el QPixmap a un archivo :)!);

¿Fue útil?

Solución

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

En 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 ideal cuando se necesita una QIODevice y desea mantenerlo en la memoria, pero si lo que realmente va a disco, a continuación, se trata de un paso intermedio innecesario.

EDIT:

Para escribir mapas de píxeles, y otras cosas, a un solo archivo me gustaría recomendar que utilice QDataStream .

En 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. */;

Usted tendrá que asegurarse de que se lee en los mismos objetos a medida que los escribió a cabo. Con el fin de ahorrarse futuros dolores de cabeza de compatibilidad, establecer la versión QDataStream explícitamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top