Как сохранить объект QPixmap в файл? - PullRequest
18 голосов
/ 12 марта 2010

У меня проблемы с чтением и записью данных 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 Ответ

38 голосов
/ 12 марта 2010

Это казалось очень длинным путем (но ваш комментарий лучше объясняет):

Для записи:

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

Для чтения:

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

QBuffer замечательно, когда вам нужен QIODevice и вы хотите сохранить его в памяти, но если вы на самом деле выходите на диск, это ненужный средний шаг.

РЕДАКТИРОВАТЬ:

Для записи растровых изображений и прочего в один файл я рекомендую использовать 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 явно.

...