別のQIODevice(ファイルの場合もあります)からのデータストリームを復号化するカスタムQIODeviceがあります。ファイルの暗号化と復号化に使用されます。一部のファイルは画像です。次に、QImageReaderを使用して暗号化ストリームから画像を直接ロードしますが、まれにQImageReaderがそのストリームからの画像の読み取りに失敗することがあります。暗号化されていないファイルからQImageReaderで適切に読み取ることができるPNG画像が1つあります。しかし、カスタム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エラーを返すのでしょうか?