使用 QuaZip 提取 .cbz 并在 Qt 中创建 QImages?
Using QuaZip to extract .cbz and create QImages in Qt?
我目前正在尝试解压缩一个 .cbz 文件(基本上是一个 .zip 文件)并将该 .cbz 文件中包含的所有 .png 图像存储到 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
,因为 newImage
被认为是 invalid
Qt.
这是我做错了什么?我应该在 QuaZip 中使用不同的函数而不是 JlCompress 吗?
事实证明,提取 .cbz 文件导致至少有一个文件不是图像文件,而 QImage 试图以此为基础,导致错误。我没有足够注意解压缩文件的内容。
现在可以使用了,因为我正在使用布尔表达式来检查未压缩文件的文件扩展名。
所以是啊,我的坏人。
我目前正在尝试解压缩一个 .cbz 文件(基本上是一个 .zip 文件)并将该 .cbz 文件中包含的所有 .png 图像存储到 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
,因为 newImage
被认为是 invalid
Qt.
这是我做错了什么?我应该在 QuaZip 中使用不同的函数而不是 JlCompress 吗?
事实证明,提取 .cbz 文件导致至少有一个文件不是图像文件,而 QImage 试图以此为基础,导致错误。我没有足够注意解压缩文件的内容。
现在可以使用了,因为我正在使用布尔表达式来检查未压缩文件的文件扩展名。
所以是啊,我的坏人。