2010-03-12 4 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 :: loadFromData를 사용하여 QPixmap에 다시로드 할 수 있도록하려면 기능.

추가 설명이 필요하면 알려주십시오 (대안 접근법도 열려 있습니다. QPixmap을 파일로 읽고 쓸 수 있어야합니다. :));

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

QBuffer은 다음과 같습니다 독서를 들어

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

: 쓰기 위해

: (하지만 더 나은 귀하의 코멘트가 설명) 그 일에 대해 갈 수있는 정말 먼 길처럼 보였다

답변

34

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 버전을 명시 적으로 설정하십시오.

+0

이 솔루션은 훌륭하지만 텍스트와 함께 여러 이미지 데이터를 단일 파일로 저장할 수 있어야합니다. 예를 들어, 내 파일은 사진 1 제목, 사진 1 개 정보 ... 등 <관련 QPixmap 데이터> 사진이 제목, 사진 2 정보 ... 등 <관련 QPixmap 데이터> 어떤 제안을 포함 할 것인가? –

+0

QDataStream을 참조하도록 편집 됨. –

관련 문제