我正在使用 Qt 4.5 开发一个图形应用程序,并将图像放入 QPixmapCache 中,我想对此进行优化,以便如果用户插入已经在缓存中的图像,它将使用该图像。
现在,每个图像都有一个唯一的 ID,有助于在绘制事件时优化自身。但是我意识到,如果我可以计算图像的哈希值,我可以查找缓存以查看它是否已经存在并使用它(当然,这对于重复的对象会有更多帮助)。
我的问题是,如果它是一个大的 QPixmap,它的哈希计算会减慢速度还是有更快的方法?
对此有几点评论:
如果您要生成像素图的哈希/缓存键,那么您可能需要跳过 QPixmapCache 并直接使用QCache。这将消除使用 QStrings 作为键的一些开销(除非您还想使用文件路径来定位项目)
从 Qt4.4 开始,QPixmap 有一个与之关联的“哈希”值(请参阅QPixmap::cacheKey())。该文档声称“不同的 QPixmap 对象只有引用相同的内容才能具有相同的缓存键。”然而,由于 Qt 使用共享数据复制,这可能仅适用于复制的像素图,而不适用于从同一图像加载的两个不同的像素图。一些测试会告诉你它是否有效,如果有效,它会让你轻松获得哈希值。
如果你真的想做一个好的、相当快的缓存并删除重复项,你可能想看看你自己的数据结构根据大小、颜色深度、图像类型等进行排序。然后,在找到具有相同尺寸、位深度等的相同类型的图像后,您只需要对实际图像数据进行哈希处理。当然,如果您的用户通常打开大量具有相同内容的图像,则不会根本没有帮助。
性能:不要忘记 Qt 在 4.5 中添加的基准测试工具,它可以让您比较各种哈希想法并查看哪一种运行速度最快。我还没有检查过,但看起来很整洁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)