2011-08-10 48 views
0

我有一個自定義的QIODevice從另一個QIODevice(它可能是一個文件)解密數據流。它被用來加密和解密文件。一些文件是圖像。然後使用QImageReader直接從加密流中加載圖像,但在某些極少數情況下,QImageReader無法從該流讀取圖像。有一個PNG圖像可以通過QImageReader從未加密的文件中正確讀取。但是,當我自定義的QIODevice層積在一個QFile並傳遞給QImageReader,它會失敗,並打印QImageReader與自定義QIODevice實現

「libpng的錯誤:IDAT:CRC錯誤」

我已經做了一些密集的調試和追蹤所有的讀取,並尋求這QImageReader將調用我的QIODevice,並把它們與這些未加密的文件QFile時沿:

device.read(encData, 2); 
file.read(pngData, 2); 
Q_ASSERT(memcmp(encData, pngData, 2) == 0); 
device.read(encData, 6); 
file.read(pngData, 6); 
Q_ASSERT(memcmp(encData, pngData, 6) == 0); 
device.seek(0); 
file.seek(0); 
.... 

而事實證明,隨着數據從數據流來從文件中讀取的所有數據是完全一樣的...

爲什麼會返回那個libpng錯誤?

回答

2

好吧,我想通了。這是我沒有實現的QIODevice::size()函數。文檔應該更具體一些需要實現的功能......