【发布时间】:2009-12-30 17:15:48
【问题描述】:
编辑:
抱歉,我想我的问题含糊不清。我想有一种方法来检查文件是否不是图像,而不会浪费时间加载整个图像,因为这样我可以稍后再进行其余的加载。我不想只检查文件扩展名。
应用程序只查看图像。通过“检查有效性”,我的意思是也在目录中“检测并跳过非图像文件”。如果像素数据已损坏,我仍想将其视为图像。
我分配页码并将这些图像配对。有些图像是单个左页或右页。有些图像很宽,是左右页面的“展开”。例如, pagesAt(3) 和 pagesAt(4) 可以返回相同的 std::pair 图像或 std::pair 相同的宽图像。
有时,有奇数个“薄”图像,第一个图像将单独显示,类似于宽图像。一个示例是单个封面。
不知道目录中的哪些文件是非图像意味着我无法自信地分配这些页码并将文件配对以进行显示。此外,用户可能决定跳转到第 X 页,当我后来发现并删除非图像文件并相应地重新分配页码时,第 X 页可能看起来是不同的图像。
原创:
如果重要的话,我使用的是 Qt 库中的 c++ 和 QImage。
我正在遍历一个目录并在图像路径上使用 QImage 构造函数。当然,这非常慢,并且会使应用程序感觉没有响应。但是,它确实允许我检测无效的图像文件并尽早忽略它们。
我可以在浏览目录时仅保存图像的路径,并仅在需要时才实际加载它们,但是我不知道图像是否无效。
我正在考虑将这两者结合起来。即在遍历目录时,仅读取图像的标题以检查有效性,然后在需要时加载图像数据。
所以,
只加载图片标题会比加载整个图片快得多吗?还是做一些 i/o 来读取标题意味着我还不如完全加载图像?稍后,我还将解压缩存档中的图像,因此这也适用于仅解压缩标题与解压缩整个文件。
另外,我不知道如何加载/读取只是图像标题。是否有一个可以只读取图像标题的库?否则,我必须自己打开所有文件类型的流和代码图像标题阅读器的每个文件。
【问题讨论】:
-
您需要多快才能知道图像是否有效? (立即,在拨打电话后立即,或在某个未定义的时间后?)您对图像做了什么 - 操作它,显示它,或者只是将数据移动到其他地方?
-
我在上面澄清了我的问题。通过有效性,我的意思是检测非图像文件,而不仅仅是查看文件扩展名或加载完整的图像文件。这就是为什么我问是否有办法仅在遍历目录时检查标题。
标签: c++ image qt file-io qimage