Cómo guardar un objeto QPixmap a un archivo?
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 :)!);
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.