1

我有一个自定义 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 错误?

4

1 回答 1

2

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

于 2011-08-10T22:41:46.257 回答