From 2ccd3a8662c46e1be9cfb21a8d60751c98e78065 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Wed, 24 Sep 2025 01:37:53 +1000 Subject: plugin: add image analyser --- plugin/src/Caelestia/imageanalyser.hpp | 61 ++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 plugin/src/Caelestia/imageanalyser.hpp (limited to 'plugin/src/Caelestia/imageanalyser.hpp') diff --git a/plugin/src/Caelestia/imageanalyser.hpp b/plugin/src/Caelestia/imageanalyser.hpp new file mode 100644 index 0000000..bbea2b3 --- /dev/null +++ b/plugin/src/Caelestia/imageanalyser.hpp @@ -0,0 +1,61 @@ +#pragma once + +#include +#include +#include +#include +#include + +namespace caelestia { + +class ImageAnalyser : public QObject { + Q_OBJECT + QML_ELEMENT + + Q_PROPERTY(QString source READ source WRITE setSource NOTIFY sourceChanged) + Q_PROPERTY(QQuickItem* sourceItem READ sourceItem WRITE setSourceItem NOTIFY sourceItemChanged) + Q_PROPERTY(int rescaleSize READ rescaleSize WRITE setRescaleSize NOTIFY rescaleSizeChanged) + Q_PROPERTY(QColor dominantColour READ dominantColour NOTIFY dominantColourChanged) + Q_PROPERTY(qreal luminance READ luminance NOTIFY luminanceChanged) + +public: + explicit ImageAnalyser(QObject* parent = nullptr); + + [[nodiscard]] QString source() const; + void setSource(const QString& source); + + [[nodiscard]] QQuickItem* sourceItem() const; + void setSourceItem(QQuickItem* sourceItem); + + [[nodiscard]] int rescaleSize() const; + void setRescaleSize(int rescaleSize); + + [[nodiscard]] QColor dominantColour() const; + [[nodiscard]] qreal luminance() const; + + Q_INVOKABLE void requestUpdate(); + +signals: + void sourceChanged(); + void sourceItemChanged(); + void rescaleSizeChanged(); + void dominantColourChanged(); + void luminanceChanged(); + +private: + using AnalyseResult = QPair; + + QFutureWatcher* const m_futureWatcher; + + QString m_source; + QQuickItem* m_sourceItem; + int m_rescaleSize; + + QColor m_dominantColour; + qreal m_luminance; + + void update(); + static void analyse(QPromise& promise, const QImage& image, int rescaleSize); +}; + +} // namespace caelestia -- cgit v1.2.3-freya