diff --git a/HyperionProcessor.cpp b/HyperionProcessor.cpp index b021a07..80ccb61 100644 --- a/HyperionProcessor.cpp +++ b/HyperionProcessor.cpp @@ -9,7 +9,8 @@ HyperionProcessor::HyperionProcessor(const LedLayout &layout, const QJsonObject _borderDetector(config.value("blackborderdetector").toObject()), _lastImageSize(0, 0), _colorSmoother(config.value("smoothing").toObject()), - _colorAlgorithm(config.value("colorAlgorithm").toString("mean_sqrt")) // Default to mean_sqrt + _colorAlgorithm(config.value("colorAlgorithm").toString("mean_sqrt")), + _offset(config.value("offset").toInt(0)) // Default offset is 0 { } @@ -40,7 +41,20 @@ QVector HyperionProcessor::process(const QImage &image) QVector calculatedColors = calculateLedColors(image); // 4. Apply smoothing - return _colorSmoother.smooth(calculatedColors); + QVector finalColors = _colorSmoother.smooth(calculatedColors); + + // 5. Apply offset if needed + if (_offset != 0 && !finalColors.isEmpty()) { + QVector shiftedColors(finalColors.size()); + int totalLeds = finalColors.size(); + + for (int i = 0; i < totalLeds; ++i) { + shiftedColors[i] = finalColors[(i + _offset) % totalLeds]; + } + return shiftedColors; + } + + return finalColors; } void HyperionProcessor::buildLedMap(int imageWidth, int imageHeight, const BlackBorder &border) diff --git a/HyperionProcessor.h b/HyperionProcessor.h index 1e81232..8c8e979 100644 --- a/HyperionProcessor.h +++ b/HyperionProcessor.h @@ -29,6 +29,7 @@ private: LedLayout _layout; QJsonObject _config; QString _colorAlgorithm; + int _offset; BlackBorderDetector _borderDetector; BlackBorder _lastBorder; diff --git a/main.cpp b/main.cpp index df9d425..0c470b6 100644 --- a/main.cpp +++ b/main.cpp @@ -181,6 +181,7 @@ int main(int argc, char *argv[]) processorConfig["blackborderdetector"] = blackBorderDetectorConfig; processorConfig["smoothing"] = smoothingConfig; processorConfig["colorAlgorithm"] = qgetenv("HYPERION_GRABBER_COLOR_ALGORITHM").isEmpty() ? QString("mean_sqrt") : QString(qgetenv("HYPERION_GRABBER_COLOR_ALGORITHM")); + processorConfig["offset"] = qgetenv("HYPERION_GRABBER_OFFSET").isEmpty() ? 0 : qgetenv("HYPERION_GRABBER_OFFSET").toInt(); QString wledColorOrder = qgetenv("HYPERION_GRABBER_WLED_COLOR_ORDER").isEmpty() ? QString("GRB") : QString(qgetenv("HYPERION_GRABBER_WLED_COLOR_ORDER"));