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錯誤?