1

別の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エラーを返すのでしょうか?

4

1 に答える 1

2

わかりました、私はそれを理解しました。それはQIODevice::size()私が実装していない機能でした。ドキュメントは、おそらく実装する必要がある機能についてより具体的である必要があります...

于 2011-08-10T22:41:46.257 に答える