Как сохранить Объект 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 в файл! :));

19
задан W.K.S 12 June 2012 в 11:31
поделиться

1 ответ

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

Для записи:

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.

40
ответ дан 30 November 2019 в 03:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: