c++ - 使用 QuaZip 提取 .cbz 并在 Qt 中创建 QImages?
问题描述
我目前正在尝试解压缩 .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
,正如QtnewImage
所说的那样。invalid
我做错了怎么办?我应该在 QuaZip 而不是 JlCompress 中使用不同的功能吗?
解决方案
事实证明,提取 .cbz 文件会导致至少一个不是图像文件的文件,并且试图从中制作 QImage,从而导致错误。我没有足够关注解压缩文件的内容。
这现在有效,因为我使用布尔表达式来检查未压缩文件的文件扩展名。
所以是啊,我的坏人。
推荐阅读
- javascript - 如何修复 Cloud Function 错误 admin.database.ref 不是导出时的函数
- python - Django App中的芹菜任务发现仅部分工作
- python - 如何将变量传递给导入的脚本
- sql - 查询以每 4 小时根据时间戳获取最大值
- sql - 如何为整个查询设置架构
- python - 如何将 **config 文件从另一个操作员传递给 SparkSubmitOperator
- python - 如何在 Google ML Engine 上部署使用自定义包训练的模型?
- php - 有没有从 Laravel 应用程序进行 Moodle 单点登录的方法?
- python - Python + Pandas + dataframe + Csv:将计算值存储在列的末尾
- python - 使用 plt.imshow() 创建叠加频谱图