Store Thumbnails with image hashes

This drastically improves the time it takes to select a dive
with several pictures at the expense of longer startup and
bigger hash files.

Signed-off-by: Robert C. Helling <helling@atdotde.de>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Robert C. Helling 2015-11-09 16:48:12 +01:00 committed by Dirk Hohndel
parent e0f43d8a84
commit 2075038de1
2 changed files with 9 additions and 4 deletions

View file

@ -6,19 +6,21 @@
#include <QtConcurrent>
extern QHash <QString, QImage > thumbnailCache;
SPixmap scaleImages(picturepointer picture)
{
static QHash <QString, QImage > cache;
SPixmap ret;
ret.first = picture;
if (cache.contains(picture->filename) && !cache.value(picture->filename).isNull()) {
ret.second = cache.value(picture->filename);
if (thumbnailCache.contains(picture->filename) && !thumbnailCache.value(picture->filename).isNull()) {
ret.second = thumbnailCache.value(picture->filename);
} else {
int dim = defaultIconMetrics().sz_pic;
QImage p = SHashedImage(picture);
if(!p.isNull()) {
p = p.scaled(dim, dim, Qt::KeepAspectRatio);
cache.insert(picture->filename, p);
thumbnailCache.insert(picture->filename, p);
}
ret.second = p;
}

View file

@ -1129,6 +1129,7 @@ extern "C" void reverseGeoLookup(degrees_t latitude, degrees_t longitude, uint32
QHash<QString, QByteArray> hashOf;
QMutex hashOfMutex;
QHash<QByteArray, QString> localFilenameOf;
QHash <QString, QImage > thumbnailCache;
extern "C" char * hashstring(char * filename)
{
@ -1152,6 +1153,7 @@ void read_hashes()
QDataStream stream(&hashfile);
stream >> localFilenameOf;
stream >> hashOf;
stream >> thumbnailCache;
hashfile.close();
}
}
@ -1163,6 +1165,7 @@ void write_hashes()
QDataStream stream(&hashfile);
stream << localFilenameOf;
stream << hashOf;
stream << thumbnailCache;
hashfile.commit();
} else {
qDebug() << "cannot open" << hashfile.fileName();