私は別のQIODevice(ファイルかもしれません)からデータストリームを解読するカスタムQIODeviceを持っています。ファイルの暗号化と復号化に使用されます。いくつかのファイルは画像です。 QImageReaderは、暗号化ストリームから直接画像をロードするために使用されますが、まれにQImageReaderがそのストリームから画像を読み取ることができません。暗号化されていないファイルからQImageReaderが正しく読み取ることができるPNGイメージが1つあります。私のカスタムのQIODeviceはqfileにより上に層状にしてQImageReaderに渡されたときしかし、それは失敗し、プリントカスタムQIODeviceを実装した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エラーが返されるのですか?