gpt4 book ai didi

c++ - 是否有用于实现动态加载图像的类的标准模式?

转载 作者:太空狗 更新时间:2023-10-29 23:09:40 27 4
gpt4 key购买 nike

我的任务是创建一个可处理数千张图像的应用程序,这些图像太多了,无法一次全部加载到 RAM 中。我猜它有点类似于像 Picassa 这样的照片查看器,因为在任何给定时刻,应用程序只需要来自全部编目图像中的一小部分的像素数据。该应用程序还必须处理非常大的图像,其中在任何给定时间实际上只需要一小部分像素数据来进行图像分析或显示,我想这有点类似于 Google Earth。简而言之,应用程序必须在任何给定时间仅动态加载实际需要的像素数据部分。

我只处理过像 OpenCV、CImg 或 Magick++ 这样的典型图像库的静态图像加载,我有点不知如何才能最好地解决这个问题。所以我的问题是:是否有针对此要求的任何标准设计模式,或解决此(或类似)问题的方法?

顺便说一句,对于小图像,我意识到我可以简单地延迟图像的加载直到需要它,但是这种方法有两个关键问题。 (1) 这并没有解决大图像问题。 (2) 由于在使用图像后立即卸载图像可能效率低下,因此我需要在应用程序中使用某种类型的内存管理处理程序,该处理程序仅在加载新图像并且已通过某些内存阈值时才卸载图像。显然,对于加载到内存中的较大图像的部分,类似的内存管理问题仍然存在。我会明确承认这样的工具超出了我的知识和经验,所以如果这是对这个问题的普遍回答,那么我有一个补充问题。谁能推荐一些内存管理的基础教程?

谢谢你的帮助!

更新:对于那些好奇的人,我想我会分享我采用的方法。我创建的图像类延迟加载图像数据。为了解决加载数千个图像的问题,我创建了一个类来跟踪文件句柄(Windows 有限制 - 请参阅 _getmaxstdio),以及已加载的图像内存量,并在必要时卸载。为了处理非常大的图像,我使用 VXL 图像库作为后端,它能够加载大图像的一部分。当然,这对于某些图像(尤其是压缩图像)来说效率不高,但由于我主要处理平铺的 TIFF 图像,所以它工作得很好。

最佳答案

如果较大的图像确实很大,以至于不适合屏幕,那么将它们拆分成较小的部分可能是合理的。

如果您通常需要显示缩小(缩小)的图像,那么您可以通过创建和存储较大图像的缩小版本来简化您的工作。边长为 x 0.707、x 0.5 等的整个级联缩小图像占用的存储空间与原始图像一样多。

对于延迟卸载,您可以加载图像(或片段,或缩小版本)并记住这些图像最近显示的时间以及它们占用的内存。一旦达到阈值但需要加载更 multimap 像,您可以从最旧的图像开始卸载以释放空间。

关于c++ - 是否有用于实现动态加载图像的类的标准模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4340121/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com