2011-08-10 7 views
0

私は別の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エラーが返されるのですか?

答えて

2

わかりました。私が実装していないのはQIODevice::size()の機能でした。ドキュメントは、実装する必要がある機能について、より具体的なものでなければなりません。

関連する問題