QImage的CacheKey方法返回的不是真正的圖像的簡單散列。有誰知道,高32位是什麼意思?比較兩幅圖像時,我真的可以忽略它們嗎? (比較只有較低的32位?)基於緩存鍵的QImage比較
僅爲了說明,該代碼讀取同一圖像多次(但將它們存儲在不同的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
or this? (看起來像高32位取決於當前內存位置)
140800000002
140900000002
140a00000002
正如我所理解的,只有比較兩個QImages的方法是將它們保存到QByteArray,通過QCryptographicHash計算散列,然後比較這些散列。我不確定是否逐像素比較它們不會更快...... – petrpulc
這不是唯一的方法(你可以通過將'QImage :: constBits'的結果傳遞給''QByteArray''來保存'QByteArray', QCryptographicHash :: addData'),這取決於你需要多久比較一次'QImage'。如果你只需要比較兩張圖片,你可以使用'=='運算符,如果你需要比較1張圖片和另外10張圖片,哈希可能會更快,但無論如何,你必須對每種方法進行基準測試(但不要'使用'QImage :: pixel()',因爲它非常慢)。 – alexisdm