gpt4 book ai didi

c++ - 基于缓存键的QImage比较

转载 作者:行者123 更新时间:2023-11-30 00:52:42 25 4
gpt4 key购买 nike

QImage 的 CacheKey 方法返回的不是真正的图像的普通散列。有谁知道高 32 位是什么意思?比较两个图像时我真的可以忽略它们吗? (只比较低32位?)


仅供说明,此代码多次读取同一图像(但将它们存储在不同的 QImage 对象中):

printf("%llx\n",QImage("image.png").cacheKey());
printf("%llx\n",QImage("image.png").cacheKey());
printf("%llx\n",QImage("image.png").cacheKey());

返回这个?

144300000002
144400000002
144500000002

还是这个? (好像高 32 位取决于当前内存位置)

140800000002
140900000002
140a00000002

最佳答案

不,您不能使用 cacheKey 的任何部分比较图像内容,它的存在只是为了确保图像自上次 cacheKey 以来没有发生变化。取值。它标识缓冲区并在 QImage 的任何非常量函数时发生变化。叫做。

但是作为cacheKey的名称属性暗示,您可以将其用作 QCache<qint64, QByteArray> 的键您将存储图像的实际哈希值的位置,您只会使用 QCryptographicHash 重新计算该哈希值仅当图像已更改时(= 仅当它不在缓存中时)。

还有 QImage不使用像 QPixmap 这样的缓存用于读取图像,因此读取同一个图像文件 3 次将分配 3 个不同的缓冲区,每次使用不同的 cacheKey .为避免每次都计算哈希值,您应该查看 QPixmap::load 的源代码。功能。

关于c++ - 基于缓存键的QImage比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18405890/

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