c++ - Qt读取多张图片优化——如何只读取大小?

标签 c++ qt

标题总结了这一点。如果我正在加载 ~200 张各种尺寸的图像。我怎样才能只加载标题以便知道每张图片的大小?

目前我发现需要大量的 cpu/内存和 IO 才能将它们全部加载到内存中,只是为了大小(我正在尝试从它们生成一个图集)。

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

最佳答案

How can I load just the header so I can know the size of each image?

显然,您似乎假设图像文件头(前几个字节)包含图像的大小。这不成立(至少不适用于所有图像格式类型)。我检查了几种格式(PNG)。

Currently I find it takes a lot of cpu/memory and IO to load them all in to memory just for the size

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

QImage doesn't seem to have a way to do this?

它没有,因为似乎没有可移植/一致的方法来为所有类型的图像格式执行此操作。但是,如果您知道任何包含标题的文件格式,您可以编写一个小的辅助函数,它可以打开文件并读取标题并找到大小。但是这个辅助函数对于特定类型的图像格式非常具体,我们可能需要编写不同的逻辑来读取标题(所有图像格式都有不同的标题大小和信息)。

关于c++ - Qt读取多张图片优化——如何只读取大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22774533/

相关文章:

c++ - 容量是否复制到 vector 中?

c++ - 来自子程序的 QT QMainWindow

c++ - APPNAME 不包含在 QStandardPaths::AppDataLocation 中

c# - 在 C++ 和 C# 之间进行通信的最快方式

c++ - 尝试获取具有自定义类型的 DBus 属性时出现 fatal error

c++ - 即使读取成功,最终计数为 0

c++ - 通用谓词作为参数的默认值-续

c++ - 如何在 Linux(和 OSX)上查询分配的内存量?

C++ udp recvfrom 减少滴

image - Qml图片和内存释放