QImageReader с пользовательской реализацией QIODevice - PullRequest
1 голос
/ 10 августа 2011

У меня есть пользовательский QIODevice, который расшифровывает поток данных из другого QIODevice (это может быть файл).Он используется для шифрования и дешифрования файлов.Некоторые из файлов являются изображениями.Затем QImageReader используется для загрузки изображения непосредственно из потока шифрования, но в некоторых редких случаях QImageReader не может прочитать изображение из этого потока.Есть одно изображение в формате PNG, которое QImageReader может правильно прочитать из незашифрованного файла.Но когда мой пользовательский QIODevice накладывается на QFile и передается в QImageReader, он не работает и печатает

"libpng error: IDAT: CRC error"

Я провел интенсивную отладку и отследил всечитает и ищет, что 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?

1 Ответ

2 голосов
/ 11 августа 2011

Хорошо, я понял это. Это была функция QIODevice::size(), которую я не реализовал. Документы, вероятно, должны быть более конкретными о функциях, которые должны быть реализованы ...

...