git repos / SagoImageBrowser

src/thumbnailworker.cpp

browsing at commit = 323e01426b4dcb7ed00c3ef686a71e1249e97995

raw · blame · history

#include "thumbnailworker.h"
#include <QImageReader>
#include <QPainter>

ThumbnailWorker::ThumbnailWorker(const QString &path,
                                 int row,
                                 std::atomic_bool *cancelFlag)
    : m_path(path),
      m_row(row),
      m_cancelFlag(cancelFlag)
{
    setAutoDelete(true);
}

void ThumbnailWorker::run()
{
    if (*m_cancelFlag)
        return;

    QImageReader reader(m_path);
    reader.setAutoTransform(true);

    QImage image = reader.read();

    if (*m_cancelFlag)
        return;

    if (!image.isNull())
    {
        // Scale to fit within 128x128 keeping aspect ratio
        QImage scaled = image.scaled(128, 128,
                                     Qt::KeepAspectRatio,
                                     Qt::SmoothTransformation);
        // Center on a 128x128 canvas with transparent/white fill
        QImage thumb(128, 128, QImage::Format_ARGB32_Premultiplied);
        thumb.fill(Qt::transparent);
        int x = (128 - scaled.width())  / 2;
        int y = (128 - scaled.height()) / 2;
        QPainter painter(&thumb);
        painter.drawImage(x, y, scaled);
        painter.end();
        emit finished(m_row, thumb);
    }
}