QImageReader具有自定义QIODevice实现

时间:2011-08-10 02:43:02

标签: qt encryption libpng qimage

我有一个自定义QIODevice,它解密来自另一个QIODevice的数据流(它可能是一个文件)。它用于加密和解密文件。一些文件是图像。然后QImageReader用于直接从加密流加载图像,但在极少数情况下,QImageReader无法从该流中读取图像。 QImageReader可以从未加密的文件中正确读取一个PNG图像。但是当我的自定义QIODevice在QFile上分层并传递给QImageReader时,它将失败并打印

“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错误?

1 个答案:

答案 0 :(得分:2)

好的,我明白了。这是我没有实现的QIODevice::size()函数。文档应该更具体地说明需要实现的功能......