我有一个自定义的QIODevice来解密来自另一个QIODevice的数据流(它可能是一个文件)。它被用来加密和解密文件。其中一些文件是图像。然后使用QImageReader直接从加密流中加载图像,但在极少数情况下,QImageReader无法从该流中读取图像。有一个PNG图像可以被QImageReader从未加密的文件中正确读取。但是,当我的自定义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错误?
发布于 2011-08-11 06:41:46
好了,我想通了。这是我还没有实现的QIODevice::size()函数。文档可能应该更具体地说明需要实现的功能……
https://stackoverflow.com/questions/7005313
复制相似问题