2010-03-12 175 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到一個文件:));

回答

34

這似乎是一個很長的路要走,約做(但您的評論更好解釋):

對於寫作:

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版本。

+0

該解決方案非常棒,但我需要能夠將多個圖像數據和文本一起保存到一個文件中。例如,我的文件將包含 圖片1標題,圖片1個信息...等 <相關的QPixmap數據> 圖片2標題,圖片2信息...等 <相關的QPixmap數據> 有什麼建議? – 2010-03-12 06:56:10

+0

編輯後引用QDataStream。 – 2010-03-12 07:10:39

相關問題