2010-03-12 2 views
18

У меня возникли проблемы с чтением и записью данных QByteArray в файл.Как сохранить объект QPixmap в файл?

Моя цель - сохранить данные 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 в файл! :));

ответ

34

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

Для написания:

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

Для чтения:

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

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

EDIT:

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

+0

Это решение замечательно, но мне нужно иметь возможность сохранять несколько данных изображения вместе с текстом в один файл. Например, мой файл будет содержать фото 1 название, фото 1 информацию ... и т.д. фото 2 названия, фото 2 информацию ... и т.д. Любых предложения? –

+0

Сообщение отредактировано для справки QDataStream. –

Смежные вопросы