2014-04-01 49 views
4

标题总结了这一个。如果我正在加载〜200张各种大小的图像。我怎样才能加载标题,所以我可以知道每个图像的大小?Qt读取许多图像优化 - 如何只读取大小?

目前我发现它需要大量的CPU /内存和IO加载它们到内存只是为了大小(我试图从他们生成一个图集)。

QImage似乎没有办法做到这一点。 QImageReader听起来像是我想要的,但这似乎仍然在继续阅读整个图像,所以不太确定它的目的是什么。是否有另一个类或某种方式来使用我刚才提到的类只从头中获取图像大小?

+0

QImageReader是否读取整个文件,即使您[调用'format' * *不调用'read'](http://stackoverflow.com/a/10564936/3126098)? –

+0

格式()不会给我的图像大小,只有图像格式 – paulm

+0

你试图找到实际的文件大小以字节为单位,或图像的尺寸? –

回答

3

如何只加载标题,以便我可以知道每个图像的大小?

显然它看起来像你认为图像文件头(前几个字节)包含图像的大小。这不适用(至少不适用于所有图像格式类型)。我检查了几种格式(PNG)。

目前我觉得它需要大量的CPU /内存和IO的在所有 它们加载到内存只是为大小

正如你所提到的,你要加载左右〜200图像在一次只是为了找到大小。这种设计看起来不太好,我们应该尝试将我们的问题分解成更小的问题。所以这里有效的方法可能是打开一个文件并将大小存储找到一些数据结构并关闭文件。如果您的程序的其他部分需要将〜200图像加载到内存中,那么我们应该尝试考虑如何避免它。

QImage似乎没有办法做到这一点?

它并没有像所有类型的图像格式似乎没有便携/一致的方式。但是,如果您知道任何包含头文件的文件格式,您可以编写一个小帮助程序函数,它可以打开文件并读取头文件并查找大小。但是这个辅助函数对于特定类型的图像格式会非常具体,我们可能需要编写不同的逻辑来读取标题(所有图像格式具有不同的标题大小和信息)。

+1

采取了点,但肯定读一个PNG头,即使这意味着寻找文件一点点比读取整个东西快,应用解压缩/其他任何和转换每个像素? – paulm

+0

@paulm:是的,它会更快,因为头大小约8-16字节,而图像的总大小可能在几KB的范围内。但大多数图像处理算法可能需要加载完整的文件到内存以应用任何文件管理器/算法。 –