Как сохранить объект QPixmap в файл?
У меня возникли проблемы с чтением и записью данных QByteArray в файл.
моя цель-сохранить данные QPixmap в QByteArray и сохранить этот QByteArray в файл (с возможностью прочитать этот QByteArray из файла и в QPixmap). Я хочу использовать следующий код из документации 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
после записи буфера в файл я хочу иметь возможность получить QByteArray и загрузить его обратно в QPixmap с помощью QPixmap:: loadFromData() функция.
пожалуйста, дайте мне знать, если какие-либо дополнительные разъяснения необходимы (я также открыт для альтернативных подходов, мне просто нужно иметь возможность читать и писать QPixmap в файл! :));
1 ответов
это казалось очень длинным способом сделать это (но ваш комментарий лучше объясняет):
для пишешь:
QFile file("yourFile.png");
file.open(QIODevice::WriteOnly);
pixmap.save(&file, "PNG");
для чтения:
QPixmap pixmap;
pixmap.load("yourFile.png");
QBuffer
отлично, когда вам нужно QIODevice
и хотите сохранить его в памяти, но если вы действительно собираетесь на диск, то это ненужный средний шаг.
EDIT:
для записи pixmaps и других вещей в один файл я бы рекомендовал использовать QDataStream.
для пишешь:
QFile file("outfile.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
out << QString("almost any qt value object")
<< yourQPixMap << yourQList /* << etc. */;
затем вы можете сделать то же самое для чтения:
QFile file("infile.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
in >> firstQString >> yourQPixmap >> yourList /* >> etc. */;
вам нужно будет убедиться, что Вы читаете те же объекты, что и записали их. Чтобы сохранить себе будущие головные боли совместимости, установите версию QDataStream явно.