Использование QuaZip для извлечения .cbz и создания QImages в Qt? - PullRequest
0 голосов
/ 03 февраля 2019

В настоящее время я пытаюсь распаковать файл .cbz (в основном файл .zip) и сохранить все изображения .png, содержащиеся в этом файле .cbz, в std::vector<QImage>.

Я использую QuaZipсделать это.Я просмотрел несколько примеров в Интернете и попытался реализовать несколько различных методов с использованием документации по классам QuaZip.

Это код, который у меня есть в настоящее время:

// Store all files for later access given the CBZ file
bool CbzReader::loadCbzFile(QString cbzFile) {
    QuaZip zip(cbzFile);
    zip.open(QuaZip::mdUnzip);

    const QStringList fileList = zip.getFileNamesList();
    QStringList allFiles = JlCompress::extractFiles(cbzFile, fileList);

    QImage newImage;
    for(int file = 0; file < fileList.size(); file++) {
        QImageReader reader(allFiles[file]);
        newImage = reader.read();

        if(newImage.isNull()) return false;

        imageList.push_back(newImage); //save image to class variable    
    }

    return true;
}

Переменная allFiles содержит 265 записей, однако, внутри цикла for он возвращает false, поскольку Qt, как говорят, newImage invalid.

Что по этому поводу я делаю неправильно?Стоит ли использовать другие функции в QuaZip вместо JlCompress?

1 Ответ

0 голосов
/ 03 февраля 2019

Оказывается, что при извлечении файла .cbz был получен хотя бы один файл, который не был файлом изображения, и QImage пытался создать из этого файл, что вызвало ошибку.Я не уделял достаточного внимания содержимому распакованного файла.

Теперь это работает, поскольку я использую логическое выражение для проверки расширений несжатых файлов.

Так что даааааа, мои плохие парни.

...