From 5e17a8f61cf1684a6201163038be2ed13f58a3c9 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sun, 1 Feb 2026 11:53:56 +0100 Subject: [PATCH] jfjoch_viewer: Use multiple threads to color images --- viewer/CMakeLists.txt | 4 ++-- viewer/image_viewer/JFJochImage.cpp | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/viewer/CMakeLists.txt b/viewer/CMakeLists.txt index 4587d32a..103f53f4 100644 --- a/viewer/CMakeLists.txt +++ b/viewer/CMakeLists.txt @@ -5,7 +5,7 @@ SET(CMAKE_AUTOMOC ON) SET(CMAKE_AUTORCC ON) SET(CMAKE_AUTOUIC ON) -FIND_PACKAGE(Qt6 COMPONENTS Core Gui Widgets Charts DBus REQUIRED) +FIND_PACKAGE(Qt6 COMPONENTS Core Gui Widgets Charts DBus Concurrent REQUIRED) QT_ADD_RESOURCES(APP_RESOURCES resources/resources.qrc) @@ -86,7 +86,7 @@ ADD_EXECUTABLE(jfjoch_viewer jfjoch_viewer.cpp JFJochViewerWindow.cpp JFJochView ${APP_RESOURCES} ) -TARGET_LINK_LIBRARIES(jfjoch_viewer Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Charts Qt6::DBus +TARGET_LINK_LIBRARIES(jfjoch_viewer Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Charts Qt6::DBus Qt6::Concurrent JFJochReader JFJochLogger JFJochCommon JFJochWriter JFJochImageAnalysis) INSTALL(TARGETS jfjoch_viewer RUNTIME COMPONENT viewer) diff --git a/viewer/image_viewer/JFJochImage.cpp b/viewer/image_viewer/JFJochImage.cpp index 4f470552..4efa71aa 100644 --- a/viewer/image_viewer/JFJochImage.cpp +++ b/viewer/image_viewer/JFJochImage.cpp @@ -16,6 +16,7 @@ #include #include #include +#include JFJochImage::JFJochImage(QWidget *parent) : QGraphicsView(parent) { setDragMode(QGraphicsView::NoDrag); // Disable default drag mode @@ -614,7 +615,12 @@ void JFJochImage::GeneratePixmap() { const float invRangeLog = (range > 0) ? (lutScale / std::log1p(range)) : 0.0f; rgb gap_color = color_scale.Apply(ColorScaleSpecial::Gap); - for (int y = 0; y < H; ++y) { + + QVector rows; + rows.reserve(H); + for (int y = 0; y < H; ++y) rows.push_back(y); + + QtConcurrent::blockingMap(rows, [&](int y) { QRgb *scanLine = reinterpret_cast(qimg.scanLine(y)); const float *row = &image_fp[y * W]; rgb *out = &image_rgb[y * W]; @@ -654,7 +660,7 @@ void JFJochImage::GeneratePixmap() { out[x] = c; scanLine[x] = qRgb(c.r, c.g, c.b); } - } + }); pixmap = QPixmap::fromImage(qimg); pixmap.setDevicePixelRatio(1.0);